PDA

Ver la Versión Completa : [Componente] Encriptar Texto


Josber
13 de junio de 2016, 21:02
¿Conocéis algún ocx libre para encriptar texto?, o ¿alguna rutina?, que sea libre. Tengo que encriptar un texto de 400 carácteres antes de grabarlo y he estado buscando y no hay nada util, no hace falta que sea una "encriptación dura", con una encriptación sencilla, me conformaría. En recursosvisualbasic, hay algo, pero o no funcionan o no consigo que funcionen.

gracias y un saludo.-

Kuk
14 de junio de 2016, 00:21
Josber, toma tío, es una DLL que he hecho yo en COBOL, algoritmo mío. No se ve nada de nada ni en hexadecimal :fuma:

Trabaja con cadenas de PIC X(50). Si necesitas más, llámala varias veces.

Para llamarla:


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> LINKAGE DE LLAMADA
01 LNK-KCRYPT. *> E - encripta, D - decripta
05 LNK-OPCION PIC X. *> Modo de llamada E/D
05 LNK-TEXTO PIC X(50).
05 LNK-ENCRIPT PIC X(50).

PROCEDURE DIVISION.
*> EJEMPLOS

*> Encripta:
MOVE "E" TO LNK-OPCION

MOVE "ABCDEFGHIJ012345678912345" &
"ABCDEFGHIJ012345678912345" TO LNK-TEXTO

CALL "KCRYPT" USING LNK-KCRYPT

MOVE LNK-ENCRIPT TO POW-TEXT OF CmText1

*> Decripta:
MOVE "D" TO LNK-OPCION

MOVE POW-TEXT OF CmText1 TO LNK-ENCRIPT

CALL "KCRYPT" USING LNK-KCRYPT

MOVE LNK-TEXTO TO POW-TEXT OF CmText2


Verás qué bonita la porquería que se ve en encriptado ;)

Josber
14 de junio de 2016, 10:37
Kuk, He añadido el .lib al proyecto y he copiado la librería y la dll, en la carpeta de los ejecutables y dll's y, además, en la carpeta donde está el proyecto y al abrir el programa, me da un mensaje de error diciéndome "No se puede encontrar el módulo especificado"

¿Me falta algo?

Muchas gracias y un saludo.-

Joseg
14 de junio de 2016, 10:50
¿Conocéis algún ocx libre para encriptar texto?, o ¿alguna rutina?, que sea libre. Tengo que encriptar un texto de 400 carácteres antes de grabarlo y he estado buscando y no hay nada util, no hace falta que sea una "encriptación dura", con una encriptación sencilla, me conformaría. En recursosvisualbasic, hay algo, pero o no funcionan o no consigo que funcionen.

gracias y un saludo.-

Um dos recursos mais poderosos é usar o "openssl" (opensource)
Exemplo usando chamada por linha de comandos:
openssl dgst -sha1 -sign keyprivada.pem -out codificar.sha1 texto_a_codificar.txt
openssl enc -base64 -in codificar.sha1 -out resultado.txt -A.

Possibilidade de se usar chaves publicas/privadas ou simplesmente encriptar qualquer coisa.

Kuk
14 de junio de 2016, 11:09
Josber, tienes que meter la DLL en la carpeta del ejecutable, o sea en %proyecto%\Debug para que la DLL esté en el mismo directorio del programa que la llama.

Josber
14 de junio de 2016, 11:32
tienes que meter la DLL en la carpeta del ejecutable, o sea en %proyecto%\Debug para que la DLL esté en el mismo directorio del programa que la llama.

Nada, sigue igual, tengo una carpeta que es C:\Vialca, que es donde están los proyectos y otra carpeta que es C:\app, que es donde están el programa principal y las dll de los proyectos.

Dentro de C:\Vialca, hay una carpeta que se llama Mensajes y dentro de esta, está la carpeta DEBUG del proyecto, he copiado ahí la dll, pero además la he copiado también en C:\app, por si acaso, y en el proyecto, he añadido la librería que está en C:\app

He hecho un ReBuid completo por si acaso y nada, el mismo error.

Un saludo.-

Kuk
14 de junio de 2016, 12:51
Josber, algo debes estar haciendo mal porque lo probé ayer en Power 9 y funcionaba y acabo de comprobarlo en PWC3 y también funciona (con el fichero COBOL85.CBR, no coge la *.LIB).

Da igual dónde tienes la LIB para añadirla al proyecto, también da igual dónde está la DLL cuando compilas. Si compila bien significa que ha cogido bien la LIB. Ahora, donde te haya generado el EXE del proyecto, en esa misma carpeta debes copiar la DLL (no la LIB), y siempre que copies a algún lado el ejecutable, también debes copiar la DLL.

Por cierto, qué componente dice que no encuentra, el KCRYPT.dll o algún otro?

Josber
14 de junio de 2016, 13:45
Lo tengo como dices, al compilar, no da ningún error, pero al hacer la llamada a la dll de mi programa, da el error que te adjunto. Si en mi programa, pongo un comentario a la linea


CALL "KCRYPT" USING LNK-KCRYPT


Entonces es cuando da el error, y el caso es que ésta linea no está en el evento Opened, sin en el Click de un botón, osea que no llega ni a ejecutarse, lo hace solo.

Un saludo.-

Kuk
14 de junio de 2016, 14:24
Josber, joe una cosa muy rara macho...

Lo de que no esté en el evento "Opened", no tiene nada que ver. Todo lo que esté LINK-eado (las *.LIB) en el ejecutable, se hace un scan antes de la ejecución si todos los módulos son encontrados. Es decir, las dependencias con las DLL LINK-eadas vía una LIB son comprobadas antes de ejecutar el programa, si no encuentra alguna, pues falla.

Entonces si comentas la línea de la llamada todo va bien?

Intenta hacerlos sin la LIB, o sea, vía fichero COBOL85.CBR:

[P-MENSAJE.Entry]
KCRYPT=KCRYPT.dll


Y haz la llamada DINÁMICA, de la siguiente manera:

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> LINKAGE DE LLAMADA
01 LNK-KCRYPT. *> E - encripta, D - decripta
05 LNK-OPCION PIC X. *> Modo de llamada E/D
05 LNK-TEXTO PIC X(50).
05 LNK-ENCRIPT PIC X(50).

01 KCRYPT PIC X(6) VALUE "KCRYPT".
PROCEDURE DIVISION.
*> EJEMPLOS

*> Encripta:
MOVE "E" TO LNK-OPCION

MOVE "ABCDEFGHIJ012345678912345" &
"ABCDEFGHIJ012345678912345" TO LNK-TEXTO

CALL KCRYPT USING LNK-KCRYPT

MOVE LNK-ENCRIPT TO POW-TEXT OF CmText1

*> Decripta:
MOVE "D" TO LNK-OPCION

MOVE POW-TEXT OF CmText1 TO LNK-ENCRIPT

CALL KCRYPT USING LNK-KCRYPT

MOVE LNK-TEXTO TO POW-TEXT OF CmText2

Josber
14 de junio de 2016, 17:27
Intenta hacerlos sin la LIB, o sea, vía fichero COBOL85.CBR:
Código:
[P-MENSAJE.Entry]
KCRYPT=KCRYPT.dll

Ahora sí que funciona perfectamente Kuk, encripta y desencripta sin problemas. Me imaginaba que el módulo comprobaba las librerías antes de abrir el programa y daba algún error y por eso no se ejecutaba.

He visto como queda el fichero encriptado y es perfecto.

Por cierto, si lo que necesito es encriptar un texto más pequeño de 50 carácteres, por ejemplo de 10, el retorno encriptado sería:


MOVE LNK-ENCRIPT (1:10) TO ...


¿o el tamaño del retorno es distinto al de envío?.

Mil gracias.-

Um dos recursos mais poderosos é usar o "openssl" (opensource)

He estado viendo un poco el tema, y eso es para encriptar fichero de texto, y no es lo que yo quería, yo lo que necesitaba era encriptar una variable antes de guardarla en un archivo.

Un saludo y gracias a todos.-

Kuk
14 de junio de 2016, 17:49
Josber, la rutina encripta la longitud total con los espacios en medio o al final del PIC X(50). Si sólo necesitas una parte, efectivamente haz:

MOVE LNK-ENCRIPT (1:10) TO ...

Porque cuando vayas a desencriptar, y hagas el MOVE 10, el resto en COBOL se llena por espacios así que el resultado sería el mismo y se reconstruiría todo correctamente.
Me alegro de que te haya gustado como queda :bien: