Página 1 de 2

Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 06 Nov 2009, 22:03
por arkcrew
Hola, veran, es qeu tengo un archivo php, que utilizo para codificar/decodificar caracteres,

Pues bien, ese archivo está en mi servidor y trabaja a la perfección, solo que mi servidor se peta al tener tantas ocnexiones, por eso he pensado en incluirlo en el propio programa, aunque no se como pasar la función.

os dejo el archivo adjunto y haber si me echan una mano,


Habia pensado en hacerlo con una funcion, algo asi como:

Código: Seleccionar todo


_codificar(hadgg364382) ; mando el texto a la función.

Func _codificar($texto) ; $texto viene a ser lo que quiero codificar..

EndFunc

 
Por ahora ano faltod e idesas, espero sus ideas!!

Un saludo


Creditos a Tukero, por facilitarme el archivo PHP!!

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 09 Nov 2009, 07:41
por Jonny
Hola

¿No te sirve la función _StringEncrypt()?

Un ejemplo:

Código: Seleccionar todo


_StringEncrypt(1, "Texto a encriptar", "Contraseña de encriptación")



 
El primer parámetro toma dos argumentos:
1=Encriptar
0=Desencriptar.

Salu2!

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 09 Nov 2009, 19:25
por arkcrew
No, aunqeu es una buena idea, deberias mirar el php que adjunto...

Un saludo!

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 09 Nov 2009, 22:33
por Chefito
Haber......pasar esto a AutoIt es facil pero un poco laborioso. Igual pasaba con el archivo en C++ que dejaste. Fijandote solo un poco por ejemplo en el de php sabes como codifica y descodifica. En autoit sería haciendo por ejemplo un switch (o select) con muchos muchos muchos case.
Incluso se podría mejorar el código que te ha dado :smt002 .
Te explico un poco como creo que va la codificación. Solo tengo una clave, pero supongo que será así.
Desde tu ejemplo:

Pass codificada: 05d6b5e9b6f090f2696402add9c869759c315bbc
Pass sin codificar: dakk27nppp

mira el array del código php. Con esto vemos que las claves sin codificar deben de ser siempre de 10 caracteres. Y la clave codificada tiene 20 pares de caracteres. Cada par representan un numero hexadecimal.
Los pares de caracteres que ocupan una posición par (d6, e9, f0, etc) indican la separación de los 10 caracteres que se utilizarán para dar la clave sin codificar (estos son los pares de caracteres que están en la posición impar).
Tukero lo que hace en su código es identificar los pares de caracteres pares para saber que código hexadecimal se le asigna a una caracter del pass sin códificar. Supongo que esto no hace falta en autoit ya que veo que está en orden sin necesidad de identidicar los pares que están en la posición par.
Mira los arrays del código php y mira los pares de caracteres que están en la posición impar (05, b5, b6, etc) y verás que se va formando la pass sin codificar:
1º caracter (1º par hexadecimal): 05=d
2º caracter (3º par hexadecimal. Sería el 2º par hexadecimal en una posición impar): b5=a
3º caracter (5º par hexadecimal. Sería el 3º par hexadecimal en una posición impar): b6=k
etc.

Sabiendo como codifica y descodifica, es muy facil hacer un par de funciones.
Utiliza funciones para tratamiento de string (cadenas) que las necesitaras para separar los pass (tanto los pares hexadecimales como el pass sin codificar). Puede que te interese StringMid metido en un for....next para separar los caracteres en un array. También puedes utilizar StringRegExp ya que sabemos que la longitud de los pass son fijas (supongo).
Intenta hacer algo de código y si tienes problemas ponlos en el foro. Pero intenta hacer algo, que es muy bonito decirle a la gente "pasarme esto" (entre líneas) y no hacer uno nada.

Saludos.

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 10 Nov 2009, 19:50
por arkcrew
no es que no investigue, aunque no lo paresca, es que ando sin internet y cuando tengo un rato..
Bueno, sigo investigando

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 11 Nov 2009, 20:54
por arkcrew

Código: Seleccionar todo


_codificar(5152) ; String correspondiente al numero 0 (51) y numero 1 (52)



Func _codificar($STRING) ; Mando a la funcion lo que quiero decodificar

For $a = 2 To Stringlen($STRING) step 2 ; desde el 2 asta el numero de caracteres de la linea

$dividir = Stringleft($STRING , $a) ; Dividimos desde la izq, sumando dos asi contamos los caracteres de 2 en dos

$replace = StringReplace($dividir, "51", "0") ;Damos la orden de que reemplace cada 51 por un 0

$replace = StringReplace($dividir, "52", "1");Damos la orden de que reemplace cada 52 por un 1

msgbox(0,"",$replace) ; Mandamos un message box con el resultado

next

EndFunc   ;==>_codificar

 
Os dejo el code comentado... no se porque no me responde...

Sigo investigando

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 11 Nov 2009, 21:09
por arkcrew
Vamos mejorando, aunqeu no llego a entender como codifica el PHP

Alguien me lo explica¿?¿?

Ahora consigo decodificar los numeros. 0-9

Código: Seleccionar todo


msgbox(0,"",_codificar(515253545556575859)) ; String correspondiente al numero 0 (51) y numero 1 (52)

Func _codificar($STRING) ; Mando a la funcion lo que quiero decodificar

For $a = 2 To 4 step 2; desde el 2 asta el numero de caracteres de la linea



    ;Secuencias numérricas

$STRING = StringReplace($STRING, "51", "0")

$STRING = StringReplace($STRING, "50", "1")

$STRING = StringReplace($STRING, "53", "2")

$STRING = StringReplace($STRING, "52", "3")

$STRING = StringReplace($STRING, "55", "4")

$STRING = StringReplace($STRING, "54", "5")

$STRING = StringReplace($STRING, "57", "6")

$STRING = StringReplace($STRING, "58", "7")

$STRING = StringReplace($STRING, "59", "8")

$STRING = StringReplace($STRING, "58", "9")

next

return $STRING

EndFunc   ;==>_codificar

 

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 12 Nov 2009, 10:26
por Ximorro
No entiendo muy bien el proceso que quieres realizar, si lo explicas con palabras miramos a ver cómo se hace en AutoIt.

Aún así veo un par de problemas en el código:
1) Quizás no es muy importante porque AutoIT hace algunas conversiones automáticamente, pero siendo que quieres tratar cadenas, en la función codificar mejor pasa una cadena en vez de un número, es decir _codificar("5152") en vez de _codificar(5152).

2) StringReplace trabaja con toda la cadena, no coge caracteres de 2 en 2 como pareces querer, para ir transformando de 2 en 2 tendrás que ir cogiendo parejas de caracteres con StringMid, transformas eso que extraes, y lo vas acumulando.
Sería StringMid($Cadena, $i, 2) con $i desde 1 hasta el tamaño de la cadena menos 1, saltando de 2 en 2. Esas subcadenas son las que tienes que ir trasformando y guardando. Claro que igual la estoy liando porque a lo mejor no es lo que quieres, si nos explicas el proceso mejor... ¿es algo como lo siguiente?
_codificar("5152") debe pasar el 51 a 0 y 52 a 3 (según los StringReplace) para dar "03".
De la misma manera _codificar("5152555951") ¿debería dar "03480"?

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 12 Nov 2009, 18:20
por arkcrew
Tengo este codigo, pero no se corresponde con el que debería salirme... Alguna idea..

Código: Seleccionar todo






msgbox(0,"",_codificar("57d6bfe9adf090f23d645dadd4c87f75da3148bc")) ; String correspondiente al numero 0 (51) y numero 1 (52)



;un code ; 6kpkfhcf6c

;Code: 57d6bfe9adf090f23d645dadd4c87f75da3148bc

Func _codificar($STRING) ; Mando a la funcion lo que quiero decodificar

    ;Secuencias numérricas

$STRING = StringReplace($STRING, "51", "0")

$STRING = StringReplace($STRING, "50", "1")

$STRING = StringReplace($STRING, "53", "2")

$STRING = StringReplace($STRING, "52", "3")

$STRING = StringReplace($STRING, "55", "4")

$STRING = StringReplace($STRING, "54", "5")

$STRING = StringReplace($STRING, "57", "6")

$STRING = StringReplace($STRING, "58", "7")

$STRING = StringReplace($STRING, "59", "8")

$STRING = StringReplace($STRING, "58", "9")



;Secuencias de letras



$STRING = StringReplace($STRING, "00", "a")

$STRING = StringReplace($STRING, "03", "b")

$STRING = StringReplace($STRING, "02", "c")

$STRING = StringReplace($STRING, "05", "d")

$STRING = StringReplace($STRING, "04", "e")

$STRING = StringReplace($STRING, "07", "f")

$STRING = StringReplace($STRING, "06", "g")

$STRING = StringReplace($STRING, "09", "h")

$STRING = StringReplace($STRING, "08", "i")

$STRING = StringReplace($STRING, "0b", "j")

$STRING = StringReplace($STRING, "0a", "k")

$STRING = StringReplace($STRING, "0d", "l")

$STRING = StringReplace($STRING, "0c", "m")

$STRING = StringReplace($STRING, "0f", "n")

$STRING = StringReplace($STRING, "0e", "o")

$STRING = StringReplace($STRING, "11", "p")

$STRING = StringReplace($STRING, "10", "q")

$STRING = StringReplace($STRING, "13", "r")

$STRING = StringReplace($STRING, "12", "s")

$STRING = StringReplace($STRING, "15", "t")

$STRING = StringReplace($STRING, "14", "v")

$STRING = StringReplace($STRING, "17", "v")

$STRING = StringReplace($STRING, "16", "w")

$STRING = StringReplace($STRING, "19", "x")

$STRING = StringReplace($STRING, "18", "y")

$STRING = StringReplace($STRING, "1b", "z")

return $STRING

EndFunc   ;==>_codificar



 

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 13 Nov 2009, 01:12
por Chefito
Mira, observando lo que te dije anteriormente y el fichero php que colgaste, una forma facil de codificar las pass sería algo así:

Código: Seleccionar todo

MsgBox(0,"",Codificar("6kpkfhcf6c"))

Func Codificar($pass)

    Local $trozopass,$resultado

    $trozopass=StringMid($pass,1,1)

    Switch $trozopass

        Case "0"

            $resultado="51"

        Case "1"

            $resultado="50"

        Case "2"

            $resultado="53"

        Case "3"

            $resultado="52"

        Case "4"

            $resultado="55"

        Case "5"

            $resultado="54"

        Case "6"

            $resultado="57"

        Case "7"

            $resultado="56"

        Case "8"

            $resultado="59"

        Case "9"

            $resultado="58"

        Case "a"

            $resultado="00"

        Case "b"

            $resultado="03"

        Case "c"

            $resultado="02"

        Case "d"

            $resultado="05"

        Case "e"

            $resultado="04"

        Case "f"

            $resultado="07"

        Case "g"

            $resultado="06"

        Case "h"

            $resultado="09"

        Case "i"

            $resultado="08"

        Case "j"

            $resultado="0b"

        Case "k"

            $resultado="0a"

        Case "l"

            $resultado="0d"

        Case "m"

            $resultado="0c"

        Case "n"

            $resultado="0f"

        Case "o"

            $resultado="0e"

        Case "p"

            $resultado="11"

        Case "q"

            $resultado="10"

        Case "r"

            $resultado="13"

        Case "s"

            $resultado="12"

        Case "t"

            $resultado="15"

        Case "u"

            $resultado="14"

        Case "v"

            $resultado="17"

        Case "w"

            $resultado="16"

        Case "x"

            $resultado="19"

        Case "y"

            $resultado="18"

        Case "z"

            $resultado="1b"

    EndSwitch

    $resultado=$resultado & "d6"

    $trozopass=StringMid($pass,2,1)

    Switch $trozopass

        Case "0"

            $resultado&="e4"

        Case "1"

            $resultado&="e5"

        Case "2"

            $resultado&="e6"

        Case "3"

            $resultado&="e7"

        Case "4"

            $resultado&="e0"

        Case "5"

            $resultado&="e1"

        Case "6"

            $resultado&="e2"

        Case "7"

            $resultado&="e3"

        Case "8"

            $resultado&="ec"

        Case "9"

            $resultado&="ed"

        Case "a"

            $resultado&="b5"

        Case "b"

            $resultado&="b6"

        Case "c"

            $resultado&="b7"

        Case "d"

            $resultado&="b0"

        Case "e"

            $resultado&="b1"

        Case "f"

            $resultado&="b2"

        Case "g"

            $resultado&="b3"

        Case "h"

            $resultado&="bc"

        Case "i"

            $resultado&="bd"

        Case "j"

            $resultado&="be"

        Case "k"

            $resultado&="bf"

        Case "l"

            $resultado&="b8"

        Case "m"

            $resultado&="b9"

        Case "n"

            $resultado&="ba"

        Case "o"

            $resultado&="bb"

        Case "p"

            $resultado&="a4"

        Case "q"

            $resultado&="a5"

        Case "r"

            $resultado&="a6"

        Case "s"

            $resultado&="a7"

        Case "t"

            $resultado&="a0"

        Case "u"

            $resultado&="a1"

        Case "v"

            $resultado&="a2"

        Case "w"

            $resultado&="a3"

        Case "x"

            $resultado&="ac"

        Case "y"

            $resultado&="ad"

        Case "z"

            $resultado&="ae"

    EndSwitch

    $resultado&= "e9"



    Return $resultado

EndFunc

 
He codificado solo los 2 primeros caracteres de los 10 que tiene el pass. Aun faltan 8 switch....case más. Mira los array del código php y pasalos. Es copiar y pegar, cambiando los caracteres de codificación y ya está.
Tendrás que ir cogiendo un caracter en cada switch. Por ejemplo, es siguiente caracter se consigue con $trozopass=StringMid($pass,3,1).....y así hasta $trozopass=StringMid($pass,10,1).

La descodificación es parecida. Serían case al revés. Y para coger los pares de caracteres que necesitas en cada switch sería $trozopass=StringMid($pass,1,2) para el 1º par, $trozopass=StringMid($pass,5,2) para el 2º par, $trozopass=StringMid($pass,9,2) para el 3º par............... hasta el último par, $trozopass=StringMid($pass,17,2).

Son muy faciles de implementar las funciones, pero muy largas en código. Seguramente se podría acortar implementando el código en c++ que diste, ya que creo que los trata matematicamente (no estoy seguro), pero es más dificil de convertir a autoit (por lo menos para mi). Esto es muchisimo más facil.

Saludos.

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 14 Nov 2009, 11:23
por arkcrew
Gracias, ya casi tengo todos los switchs completados, solo me falta la decodificación..., creo que me va a llevar bastante.

Un saludo y gracias por todo

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 11:47
por Ximorro
Ostras qué churros, igual se puede acortar metiendo los valores en arrays. Lástima que no haya estructuras tipo diccionario...

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 16:13
por Chefito
Jejejeje....si es un buen churro, pero efectivo :smt002 . Además, parece lento pero no debe serlo, ya que al encontrar el case adecuado, pasa al otro case.
Con un array? Dudo que se pueda acortar mucho. Sería complicado. La única forma de acortar esto es ver si tiene alguna forma matemática de calcular los valores e implementarla. Algo que seguramente ni merece la pena estudiar.
Pensé en intentarlo con una enumeración, pero la que tiene autoit no es la que yo conozco en otros lenguajes de programación. Una pena.

Saludos.

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 16:38
por arkcrew
No veas, nada más en la codificación me salieron 1404 lineas!! y me queda la decofdificacion

XD, es una chapuza, rápida y eficaz!!

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 16:54
por BasicOs
Puedes curiosear por aqui si deseas usar el mismo autoit sin necesitar del PHP.exe, es algo muy beta-alfa pero funciona ...

Es posible que tengas que actualizar algunas cosas para la versión actual de Autoit, en la librería pero la estructura está perfecta y funcionó durante el año con una web completa con mysql, y todavia tengo otras webs funcionando desde hace varios años en programas específicos que les puse una interfaz web-autoit, porque no me apetecia usar el gui o porque podían usar Linux o Mac, sobre todo para acceso a datos.
(El escript se ejecuta en el servidor, y en el cliente no está el autoit sino el cliente con navegador web, tipo php. Quienes conozcan php cliente-servidor seguro que comprenden como funciona.)

Aha - Au3 para web php
http://www.emesn.com/autoitforum/viewforum.php?f=6
http://www.emesn.com/autoitforum/viewto ... ?f=6&t=434

Salu2:)

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 17:03
por arkcrew
Es bastante curioso, aunqeu precisamente, estoy pasando esto a autoit para no petar más mi servidor XD

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 17:06
por Chefito
Hombreeeee....chapuza no es :smt005 . Digamos que le hemos dado una solución poco elegante. Pero yo no lo considero chapuza porque hace lo que debe perfectamente sin hacer cosas raras :smt002 .
1404??????? No será solo la función....digo yo. Porque la función según mis cálculos tendra poco más de 800 líneas....que no son pocas :smt005 .
Por cierto, cuando acabes la función no estaría mal que la colgases por si a alguien le interesa.

Saludos.

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 16 Nov 2009, 17:11
por arkcrew
No, en verdad, son 1404 lineas, tal cual te lo cuento!! , me dolia la mano al acabar XD

Si, cuando la complete, la subiré, aunque, me llevo mi rato y dudo qeu os sirva de algo suprimida esta parte por incumplimiento de las normas. Chefito

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 17 Nov 2009, 10:10
por Ximorro
Bueno, como las estructuras de datos que tenemos no son muy complejas por eso dije lo de la matriz, es lo más complejo que hay, a parte de meterse con bases de datos, que por funcionar funcionaría pero igual es peor ;-)

Pero con matrices no es tan descabellado, se me ocurre indizarlas con el código ASCII del carácter del case.
Problema: no equivocarse al colocar las cosas en el vector.
Ventaja: ¡muy compacto!, y también rápido al acceder, pues es acceso directo al elemento, seguramente será más rápido que el case, especialmente para los últimos valores.

Una primera aproximación, lo que sería el vector directo, luego lo compactaré...
El primer case sería:

Código: Seleccionar todo

Local $PrimerPase[123] = _

    ["","","","","","","","","","","","","","","","","","","","","","","","", _

     "","","","","","","","","","","","","","","","","","","","","","","","", _

     "51","50","53","52","55","54","57","56","59", _ ;cifras, ASCII 48 a 57

     "","","","","","","","","","","","","","","","","","","","", _

     "","","","","","","","","","","","","","","","","","","","", _

     "00","03","02","05","04","07","06","09","08","0b","0a","0d","0c","0f","0e", _

     "11","10","13","12","15","14","17","16","19","18","1b"]

$resultado = $PrimerPase[Asc($trozopass)]

 
Notas:
Llegamos hasta "z"', de ASCII 122, de ahí el tamaño del vector
Empezamos en "0", de ASCII 48, de ahí el relleno al principio del vector

Creo que esto ya mejora el CASE, de miles de líneas nada. Pero es que aún se puede compactar más. Por un lado podemos quitar el relleno del principio y tener en cuenta que el vector empieza con un offset de 48 (ASCII del primer elemento). Por otro lado podemos pasar las las letras a mayúsculas (si nunca se van a mezclar mayúsculas y minúsculas, pero si la entrada es hexadecimal no va a pasar). Ahí también compactamos porque en vez de acabar en ASCII(z)=122 se acaba en ASCII(Z)=90.
Este caso quedaría:

Código: Seleccionar todo

Local $PrimerPase[43] = _

    ["51","50","53","52","55","54","57","56","59","","","","","","","","", _

     "00","03","02","05","04","07","06","09","08","0b","0a","0d","0c","0f","0e", _

     "11","10","13","12","15","14","17","16","19","18","1b"]

$resultado = $PrimerPase[Asc(StringUpper($trozopass))-48]
Como veis es ultracompacto, y de media quizás más rápido que el CASE, a pesar del cálculo del índice. Ese cálculo se podría poner en una función, para más comodidad.

Código: Seleccionar todo

Func _Indice($car)

    return Asc(StringUpper($car))-48

EndFunc
Y hacer la llamada así:
$resultado2 = $PrimerPase[_Indice($trozopass)]

Esta función sería compartida por todos los vectores, pues tienen el mismo formato, sólo hay que cambiar los códigos.

Hale espero que sirva de ayuda.

Ciaoooo

Re: Pasar unas funciones PHP a autoit, ¿Es posible?

Publicado: 17 Nov 2009, 15:57
por Chefito
Pues sí, tienes razón. Es mucho más corto utilizando una matriz.
Te digo por que no lo hice así al principio? Porque creí que en AutoIt no se podía inicializar una variable matriz con todos los elementos definidos. Pensaba que se tendrían que hacer uno a uno. No vi ningún ejemplo en la ayuda y ni si quiera me molesté en comprobarlo. Que fallo!! :smt005 .
Pero mi idea era esa. En realidad utilizar una matriz de doble dimensión o dos matrices simples, una con las letras y otra con los números (ya que ambos están continuos en la tabla ascii). Comprobar si el caracter pasado es un número o no, y según sea, aplicar una fórmula para que te diese el número de caracter adecuado (chr).
Pero al creer que no se podía inicializar la matriz lo deseché :smt004 . Por eso dije lo de la enumeración.
Además, así puedes utilizar las matrices tanto para la codificación como para descodificación, lo que te ahorras muchísimo código.
Gracias por sacarme de mi error Ximorro. Muy bueno.

Saludos.