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, $i, 1));
}
$TextASCIIS = array();
for ($l = 1; $l <= strlen($str); $l++) {
$TextASCIIS[$l] = ord(substr($str, $l, 1));
}
if ($mode == "E") {
for ($j = 1; $j <= strlen($str); $j++) {
$k = ($k + 1 >= n) ? 1 : $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 + 1 >= n) ? 1 : $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, $i, 1));
}
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, $l, 1));
}
Lo mismo para la cadena pasada por parámetro.
Código PHP:
if ($mode == "E") {
for ($j = 1; $j <= strlen($str); $j++) {
$k = ($k + 1 >= n) ? 1 : $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 + 1 >= n) ? 1 : $k + 1;
$temp = $TextASCIIS[$j] - $UserKeyASCIIS[$j];
if ($temp < 0) {
$temp+=255;
}
$var+=ord($temp);
}
}
Lo mismo para desencriptar.
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