Ver Mensaje Individual
  #6 (permalink)  
Antiguo 20/03/2011, 21:50
reynierpm
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 14 años
Puntos: 1
Respuesta: Llevar función de VB6 a PHP

Hmm pues si entendi bien no logro q me funcione. Aqui la función en PHP y explico paso a paso lo q hice para ver si concuerda con el algoritmo EncryptDecrypt.
Función PHP:
Código PHP:
function EncryptDecrypt($str$mode "E") {
    
$UserKey "IRONMAN";
    
$n strlen($UserKey);

    
$UserKeyASCIIS = array();
    for (
$i 1$i <= $n$i++) {
        
$UserKeyASCIIS[$i] = ord(substr($UserKey$i1));
    }

    
$TextASCIIS = array();
    for (
$l 1$l <= strlen($str); $l++) {
        
$TextASCIIS[$l] = ord(substr($str$l1));
    }

    if (
$mode == "E") {
        for (
$j 1$j <= strlen($str); $j++) {
            
$k = ($k >= n) ? $k 1;
            
$temp $TextASCIIS[$j] + $UserKeyASCIIS[$j];
            if (
$temp 255) {
                
$temp-=255;
            }
            
$var+=ord($temp);
        }
    }

    if (
$mode == "D") {
        for (
$j 1$j <= strlen($str); $j++) {
            
$k = ($k >= n) ? $k 1;
            
$temp $TextASCIIS[$j] - $UserKeyASCIIS[$j];
            if (
$temp 0) {
                
$temp+=255;
            }
            
$var+=ord($temp);
        }
    }

    return 
$var;

Explicación:
Código PHP:
$UserKey "IRONMAN"
La misma cadena usada en el código original
Código PHP:
$n strlen($UserKey); 
Guardo en la variable n($n en PHP) el tamaño de la cadena contenida en la variable $UserKey. Resultado "7"
Código PHP:
$UserKeyASCIIS = array(); 
Creo un arreglo para almacenar los valores obtenidos en el ciclo FOR
Código PHP:
for ($i 1$i <= $n$i++) {
        
$UserKeyASCIIS[$i] = ord(substr($UserKey$i1));

Ciclo FOR que va desde $i = 1 hasta $i <= $n ( tamaño de la cadena $UserKey). ord(substr($str, $l, 1)) obtiene el valor ASCII del caracter retornado por substr($str, $l, 1) que devuelve el caracter de la cadena en la posicón $l y solo 1 a pesar de que la cadena sea más larga.
Código PHP:
$TextASCIIS = array();
    for (
$l 1$l <= strlen($str); $l++) {
        
$TextASCIIS[$l] = ord(substr($str$l1));
    } 
Lo mismo para la cadena pasada por parámetro.
Código PHP:
if ($mode == "E") {
        for (
$j 1$j <= strlen($str); $j++) {
            
$k = ($k >= n) ? $k 1;
            
$temp $TextASCIIS[$j] + $UserKeyASCIIS[$j];
            if (
$temp 255) {
                
$temp-=255;
            }
            
$var+=ord($temp);
       }

Si el modo es "E" (encriptar) se hace un ciclo FOR desde $j =1 hasta el tamaño de la cadena pasada como parámetro. A la variable $k se le asigna 1 si $k+1 >=n y sino se le asigna $k+1. Se guarda en una variable $temp la suma de los valores contenidos en los arreglos $TextASCIIS y $UserKeyASCIIS en la posición $j. Si $temp > 255 entonces $temp = $temp - 255 o lo que es lo mismo $temp-=255. En $var se almacena $var = $var + ord($temp) [ya dijimos antes que ord() devuelve el valor ASCII del numero pasado como parámetro] o lo que es lo mismo $var+=ord($temp);
Código PHP:
if ($mode == "D") {
        for (
$j 1$j <= strlen($str); $j++) {
            
$k = ($k >= n) ? $k 1;
            
$temp $TextASCIIS[$j] - $UserKeyASCIIS[$j];
            if (
$temp 0) {
                
$temp+=255;
            }
            
$var+=ord($temp);
        }

Lo mismo para desencriptar.
Código PHP:
return $var
Se retorna $var (creo que equivale a rnd en el código VB)

Cuando hago la llamada a la función no retorna valor alguno y no se si es xq entendí mal o algo anda mal en el código PHP. Al tanto de comentarios. Saludos