Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Llevar función de VB6 a PHP

Estas en el tema de Llevar función de VB6 a PHP en el foro de Visual Basic clásico en Foros del Web. Hola: Me han pedido que pase un software que está realizado en VB6 a PHP pero no tengo conocimientos de VB6 por lo cual hay ...
  #1 (permalink)  
Antiguo 20/03/2011, 10:58
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Llevar función de VB6 a PHP

Hola:
Me han pedido que pase un software que está realizado en VB6 a PHP pero no tengo conocimientos de VB6 por lo cual hay muchas cosas que no comprendo. Necesito que me ayuden a descifrar esta función:
Código:
Public Function ED(text As String, Action As Single) As String
 '   (UserKey As String, Text As String, Action As Single) As String
    Dim UserKey As String
    Dim UserKeyX As String
    Dim Temp     As Integer
    Dim Times    As Integer
    Dim i        As Integer
    Dim J        As Integer
    Dim n        As Integer
    Dim rtn      As String
    
    UserKey = "IRONMAN"
    n = Len(UserKey)
    ReDim UserKeyASCIIS(1 To n)
    For i = 1 To n
        UserKeyASCIIS(i) = Asc(Mid$(UserKey, i, 1))
    Next
        
    ReDim TextASCIIS(Len(text)) As Integer
    For i = 1 To Len(text)
        TextASCIIS(i) = Asc(Mid$(text, i, 1))
    Next
    
    If Action = ENCRYPT Then
       For i = 1 To Len(text)
           J = IIf(J + 1 >= n, 1, J + 1)
           Temp = TextASCIIS(i) + UserKeyASCIIS(J)
           If Temp > 255 Then
              Temp = Temp - 255
           End If
           rtn = rtn + Chr$(Temp)
       Next
    ElseIf Action = DECRYPT Then
       For i = 1 To Len(text)
           J = IIf(J + 1 >= n, 1, J + 1)
           Temp = TextASCIIS(i) - UserKeyASCIIS(J)
           If Temp < 0 Then
              Temp = Temp + 255
           End If
           rtn = rtn + Chr$(Temp)
       Next
    End If
    ED = rtn
End Function
a ver como la llevo al lenguaje PHP.
Un saludo y gracias por adelantado
  #2 (permalink)  
Antiguo 20/03/2011, 15:11
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Llevar función de VB6 a PHP

pues seguramente aqui no encontraras a muchos que puedan explicar a alguien que habla otro lenguage (php), pero pro lo pronto pues te digo vamos a lo basico:
  • todo lo que aparesca despues de la comilla simple ( ' ) es un comentario en vb
  • Dim es para declarar una variable, despues del nombre de la variable sigue le asigna un tipo de datos con "as" integer, string, boolean, etc, etc. creo que en php no hace falta solo se pone el signo $antesdelavariable.

supongo que sabes que son los parámetros de una función y como hacer una asignación
  • Redim se usa para redimencionar una matriz o arreglo o array, que por cierto no se declara por lo menos en el código que pasaste, aunque no es necesario, amenos que uses Option Explicit esta debe declararse con dim arreglo ( numerox) as integer, string, bolean, etc, etc. esto en php no es necesario pero como aqui sabemos de vb pues....

bueno viendo mas a fondo tu función ya vi que es lo que pretende
lo que hace es encriptar o desencriptar una cadena de texto segun el parametro Action, almacenando el valor ascii de cada caracter que se encuentre en la variable text que entra como paramentro.

aver si me explico bien
--------
UserKey = "IRONMAN"
n = Len(UserKey)
ReDim UserKeyASCIIS(1 To n)
For i = 1 To n
UserKeyASCIIS(i) = Asc(Mid$(UserKey, i, 1))
Next
-------

fijate que primero se asigna a la variable UserKey la palabra "IRONMAN"
despues
a n se le asigna la longitud de la variable UserKey usando Len en este caso "IRONMAN" tiene 7 letras asi que n = 7 despues
se redimenciona UserKeyASCIIS ( ) con la cantidad de lugares en n ya que en el siclo for se va a combertir cada una de los caracteres en la variable UserKey en un valor ascii con
Asc(Mid$(UserKey, i, 1)) y este va a ir a su correspondiente posicion ( i ) en el arreglo UserKeyASCIIS(N) que por cierto un valor ascii es un valor numerico seguramente ya sabes eso bueno alomejor ya te enrede mucho.

por el momento sera bueno que comprendas esto espero retroalimentacion para seguir ayudando.
  #3 (permalink)  
Antiguo 20/03/2011, 15:34
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Llevar función de VB6 a PHP

Exacto, esa función lo que hace es encriptar/desencriptar una cadena X que se le pase como parámetro y en dependencia del 2do parámetro encripta o desencripta. Yo tengo conocimientos de programación así que puedes hablar sin problemas alguno. Visual Basic 6 fue lo primero que usé pero fue hace alrededor de 13 años y desde ese entonces no lo he tocado más hasta ahora

Ahora bien de todo lo que me explicas hay algo que no logro entender y es lo siguiente:
Cita:
se redimenciona UserKeyASCIIS ( ) con la cantidad de lugares en n ya que en el siclo for se va a combertir cada una de los caracteres en la variable UserKey en un valor ascii con
Asc(Mid$(UserKey, i, 1)) y este va a ir a su correspondiente posicion ( i ) en el arreglo UserKeyASCIIS(N) que por cierto un valor ascii es un valor numerico seguramente ...
Me explicas un poco que es lo que hace esa porción de código?

Saludos y gracias por la ayuda
  #4 (permalink)  
Antiguo 20/03/2011, 15:51
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 6 meses
Puntos: 19
Respuesta: Llevar función de VB6 a PHP

Código vb:
Ver original
  1. Dim UserKey As String
  2.     Dim UserKeyX As String
  3.     Dim Temp     As Integer
  4.     Dim Times    As Integer
  5.     Dim i        As Integer
  6.     Dim J        As Integer
  7.     Dim n        As Integer
  8.     Dim rtn      As String

Simple declaracion de variables


Código vb:
Ver original
  1. UserKey = "IRONMAN"

Clave que se va a usar para encriptar...

Código vb:
Ver original
  1. n = Len(UserKey)

n variable del tipo INTERO, que guarda la cantidad de caracteres de la variable UserKey.. (que serian 7)


Código vb:
Ver original
  1. ReDim UserKeyASCIIS(1 To n)

Redimensiona el array... Un array es una coleccion de datos del mismo tipo ...
Osea que el array va a tener de 1 a 7
Código vb:
Ver original
  1. For i = 1 To n
  2.         UserKeyASCIIS(i) = Asc(Mid$(UserKey, i, 1))
  3.     Next

Usa un FOR, para ir recorriendo caracter por caracter de la palabra "IRONMAN" y en el array va guardando el codigo ASCII de cada caracter en casa posicionb del array


Código vb:
Ver original
  1. ReDim TextASCIIS(Len(text)) As Integer
  2.     For i = 1 To Len(text)
  3.         TextASCIIS(i) = Asc(Mid$(text, i, 1))
  4.     Next

Similiar a todo lo anterior, pero lo que usa ahora es el "text" que se le envia por los parametros de la funcion


Código vb:
Ver original
  1. If Action = ENCRYPT Then
  2.        For i = 1 To Len(text)
  3.            J = IIf(J + 1 >= n, 1, J + 1)
  4.            Temp = TextASCIIS(i) + UserKeyASCIIS(J)
  5.            If Temp > 255 Then
  6.               Temp = Temp - 255
  7.            End If
  8.            rtn = rtn + Chr$(Temp)
  9.        Next


Verifica si hay que ENCRIPTAR...
SI J+1 >= n ENTONCES
J=1
SINO
J = J+1
FIN SI

A la variable temporal suma los valores ascii que previamente guardo en el array...
Pero suma segun la posicion de I y de J

Si Temp > 255 Significa que supero la cantidad maxima del codigo ascii
rtn, va acumulando el caracter segun el codigo ascii generado...


Código vb:
Ver original
  1. ElseIf Action = DECRYPT Then
  2.        For i = 1 To Len(text)
  3.            J = IIf(J + 1 >= n, 1, J + 1)
  4.            Temp = TextASCIIS(i) - UserKeyASCIIS(J)
  5.            If Temp < 0 Then
  6.               Temp = Temp + 255
  7.            End If
  8.            rtn = rtn + Chr$(Temp)
  9.        Next
  10.     End If
  11.     ED = rtn

Similar que el anterior, pero haciendo a la inversa, para volver los caracteres anteriores...

Es un metodo muy sensillo de encriptacion, nada fuera de lo comun que se puede pasar facilmente a cualquier lenguaje
  #5 (permalink)  
Antiguo 20/03/2011, 16:23
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Llevar función de VB6 a PHP

si claro mira

Cita:
se redimenciona UserKeyASCIIS ( ) con la cantidad de lugares en n ya que en el siclo for se va a combertir cada una de los caracteres en la variable UserKey en un valor ascii con
Asc(Mid$(UserKey, i, 1)) y este va a ir a su correspondiente posicion ( i ) en el arreglo UserKeyASCIIS(N) que por cierto un valor ascii es un valor numerico seguramente ...
tenemos que UserKeyASCIIS es un arreglo y asi lo vamos a llamar apartir de ahora, seguramente ya sabes que es un arreglo asi que tenlo en mente.

entramos a un ciclo for i de 1 hasta n, donde n es igual al numero de letras ó caracteres que hay en la palabra que se va a encriptar, llamemosla clave ok?.

regresando al arreglo antes del ciclo for se redimenciono justamente "al numero de letras que hay en la clave" ( a esto vamos a llamarlo Len(clave) que de hecho asi se saca el valor), porque?

para almacenar el valor ascii de cada letra ó caracter que aparecen en la clave, con la posicion correspondiente del arreglo y para eso es la i del for.

ahora como obtener el valor ascci de cada letra pues con el siclo for podemos sacar un numero del 1 hasta Len(clave) y analizando lo siguiente:

Asc(Mid$(UserKey, i, 1))

tenemos primero de afuera hacia adentro Asc() que nos regresa el valor ascii de una letra ó numero, despues tenemos mid( , , ) nota que tiene 3 parametros, bueno mid (,,) nos regresa un fragmento de una cadena de texto, el primer parametro es la cadena de texto, despues el numero de la posicion donde empesara el fragmento y por ultimo la cantidad de caracteres que queremos de regreso apartir de parametro anterior.

veamos la palabra AIRONMAN como quedaria:

Código:
indice for        1         2           3            4           5            6          7          8
Clave             A          I           R            O          N            M          A          N
ARREGLO          65        73         82         79           78           77        65        78
  #6 (permalink)  
Antiguo 20/03/2011, 21:50
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
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
  #7 (permalink)  
Antiguo 20/03/2011, 22:07
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Llevar función de VB6 a PHP

Hmmm soy yo nuevamente, he probado mi código con el juego de datos AIRONMAN y no me retorna los mismos valores que a ti:
Código:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
A- I- R- O- N - M - A- N
73 - 82- 79 - 78- 77- 65- 78- 0
que ven mal ustedes en el código?

Saludos
  #8 (permalink)  
Antiguo 21/03/2011, 04:15
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Llevar función de VB6 a PHP

Yo empezaria cambiando esto:

$var+=ord($temp);

por

$var+=chr($temp);

ya que ord() es lo contrario de chr() y tu lo has cambiado


PD:
Si quieres conseguir los valores del ejemplo de gakex puedes, (como experimento), guardar el ascii en lugar del caracter codificado:
Algo como...

$var+=$temp + " - " ;
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 21/03/2011 a las 04:23
  #9 (permalink)  
Antiguo 21/03/2011, 05:43
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Llevar función de VB6 a PHP

Me ha quedado de esta forma:
Código PHP:
function EncryptDecrypt($str$mode "E") {
    
$UserKey "IRONMAN";
    
$n strlen($UserKey);

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

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

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

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

Pero me funciona solo para encriptar el desencriptar no me funciona :(
  #10 (permalink)  
Antiguo 21/03/2011, 14:32
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Llevar función de VB6 a PHP

http://www.php.net/manual/en/function.chr.php#102263

aquí hay una función similar a esta en php seguro que si te funcionara suerte.

Etiquetas: php, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:22.