Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Componente] Encriptar Texto (https://www.cobolforo.es/showthread.php?t=406)

Josber 13 de junio de 2016 21:02

Encriptar Texto
 
¿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

1 Archivos Adjunto(s)
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:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4. *>  LINKAGE DE LLAMADA
  5.  01  LNK-KCRYPT. *> E - encripta, D - decripta
  6.      05  LNK-OPCION      PIC X.     *> Modo de llamada E/D
  7.      05  LNK-TEXTO       PIC X(50).
  8.      05  LNK-ENCRIPT     PIC X(50).                
  9.                                                    
  10.  PROCEDURE DIVISION.                                
  11.     *> EJEMPLOS
  12.    
  13.      *> Encripta:
  14.      MOVE "E" TO LNK-OPCION                          
  15.                                                    
  16.      MOVE "ABCDEFGHIJ012345678912345" &            
  17.           "ABCDEFGHIJ012345678912345" TO LNK-TEXTO
  18.                                                    
  19.      CALL "KCRYPT" USING  LNK-KCRYPT              
  20.                                                    
  21.      MOVE LNK-ENCRIPT TO POW-TEXT OF CmText1
  22.    
  23.      *> Decripta:
  24.      MOVE "D" TO LNK-OPCION                          
  25.                                                    
  26.      MOVE POW-TEXT OF CmText1 TO  LNK-ENCRIPT  
  27.                                                      
  28.      CALL "KCRYPT" USING LNK-KCRYPT              
  29.                                                    
  30.      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

Cita:

Citación del post de Josber (Mensaje 2049)
¿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:
Código:

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

Cita:

Citación del post de Kuk (Mensaje 2054)
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

1 Archivos Adjunto(s)
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

Código COBOL:
  1.                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:
Código:

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

Y haz la llamada DINÁMICA, de la siguiente manera:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.                                  
  2.  DATA            DIVISION.                                  
  3.  WORKING-STORAGE SECTION.                                  
  4. *>  LINKAGE DE LLAMADA                                    
  5.  01  LNK-KCRYPT. *> E - encripta, D - decripta              
  6.      05  LNK-OPCION      PIC X.     *> Modo de llamada E/D  
  7.      05  LNK-TEXTO       PIC X(50).                        
  8.      05  LNK-ENCRIPT     PIC X(50).                        
  9.                                                            
  10.  01  KCRYPT              PIC X(6) VALUE "KCRYPT".          
  11.  PROCEDURE DIVISION.                                        
  12.     *> EJEMPLOS                                            
  13.                                                            
  14.      *> Encripta:                                          
  15.      MOVE "E" TO LNK-OPCION                                
  16.                                                            
  17.      MOVE "ABCDEFGHIJ012345678912345" &                    
  18.           "ABCDEFGHIJ012345678912345" TO LNK-TEXTO          
  19.                                                            
  20.      CALL KCRYPT USING LNK-KCRYPT                          
  21.                                                            
  22.      MOVE LNK-ENCRIPT TO POW-TEXT OF CmText1                
  23.                                                            
  24.      *> Decripta:                                          
  25.      MOVE "D" TO LNK-OPCION                                
  26.                                                            
  27.      MOVE POW-TEXT OF CmText1 TO  LNK-ENCRIPT              
  28.                                                            
  29.      CALL KCRYPT USING LNK-KCRYPT                          
  30.                                                            
  31.      MOVE LNK-TEXTO TO POW-TEXT OF CmText2                  

Josber 14 de junio de 2016 17:27

Cita:

Citación del post de Kuk (Mensaje 2059)
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:

Código COBOL:
  1.      MOVE LNK-ENCRIPT (1:10) TO  ...

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

Mil gracias.-

Cita:

Citación del post de Joseg (Mensaje 2052)
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.-


La franja horaria es GMT +2. Ahora son las 08:27.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.