Ver Mensaje Individual
  #16
Antiguo 20 de marzo de 2026, 10:17
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Joseg, para no reinventar la rueda, vamos a optar por soluciones estándar, como es el caso de OpenSSL: https://es.dll-files.com/libcrypto.dll.html

Con esta solución generamos un HASH, en el caso concreto, el SHA256:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  strInput    PIC X(3000).  
  5.      
  6.  01  LK-HASH-RAW       PIC X(32).
  7.  
  8.  01  hLib        PIC S9(9) COMP-5.
  9.  01  ptrSHA256   PROCEDURE-POINTER.
  10.  01  ptrINPUT    POINTER.
  11.  01  nPtrINPUT REDEFINES ptrINPUT PIC S9(9) COMP-5.
  12.  
  13.  01  strLen      PIC S9(9) COMP-5.
  14.  
  15.  
  16. *-----------------------------------
  17.  01  LNK-LEN                      PIC 9(4) COMP.
  18.  01  LNK-INPUT.
  19.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  20.  
  21.  01  LNK-OUTPUT.
  22.      05  LNK-HEX1.
  23.          10  LNK-H1 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  24.      05  LNK-HEX2.
  25.          10  LNK-H2 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  26.      
  27.  PROCEDURE       DIVISION.
  28.      
  29.      MOVE POW-TEXT OF CmText1 TO strInput
  30.      
  31.      CALL "LoadLibraryA" WITH STDCALL USING BY CONTENT "libcrypto.dll" RETURNING hLib
  32.      
  33.      CALL "GetProcAddress" WITH STDCALL USING BY VALUE hLib, BY CONTENT "SHA256" & X"00" RETURNING ptrSHA256
  34.      
  35.      MOVE FUNCTION ADDR(strInput) TO ptrINPUT
  36.      
  37.      COMPUTE strLen = FUNCTION STORED-CHAR-LENGTH(strInput)
  38.      
  39.      CALL ptrSHA256 WITH STDCALL USING
  40.         BY VALUE     nPtrINPUT
  41.         BY VALUE     strLen
  42.         BY REFERENCE LK-HASH-RAW
  43.      
  44.      COMPUTE LNK-LEN = FUNCTION STORED-CHAR-LENGTH(LK-HASH-RAW)
  45.      MOVE LK-HASH-RAW TO LNK-INPUT
  46.      
  47.      CALL "HEX" USING LNK-LEN, LNK-INPUT, LNK-OUTPUT
  48.      
  49.      MOVE LNK-OUTPUT TO POW-TEXT OF CmText3  

Tienes que crear una nueva PROCEDURE y llamarla HEX, su contenido es el siguiente:
Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA DIVISION.
  3.  
  4.  WORKING-STORAGE SECTION.
  5.  01  IDX-1                        PIC S9(4)  COMP-5.
  6.  01  IDX-S                        PIC S9(4)  COMP-5.
  7.  
  8.  01  TBL-HEX                      PIC X(16) VALUE "0123456789ABCDEF".
  9.  
  10.  01  WS-HEX-1                     PIC S9(4)  COMP-5.
  11.  01  WS-HEX-2                     PIC S9(4)  COMP-5.
  12.  
  13.  01  WS-BIN                       PIC X.
  14.  01  WS-BIN-2 REDEFINES WS-BIN    PIC 9(2) COMP-5.
  15.    
  16. ******************************************************************
  17. *                      LINKAGE SECTION                           *
  18. ******************************************************************
  19.  LINKAGE SECTION.
  20.  01  LNK-LEN                      PIC 9(4) COMP.
  21.  01  LNK-INPUT.
  22.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  23.  
  24.  01  LNK-OUTPUT PIC X(2000).
  25.  
  26. ******************************************************************
  27. *                       PROCEDURE DIVISION
  28. ******************************************************************
  29.  PROCEDURE DIVISION USING LNK-LEN, LNK-INPUT, LNK-OUTPUT.
  30.      
  31.      MOVE 1 TO IDX-1, IDX-S
  32.      
  33.      PERFORM UNTIL IDX-1 > LNK-LEN
  34.          MOVE LNK-INPUT(IDX-1:1) TO WS-BIN
  35.          
  36.          DIVIDE WS-BIN-2 BY 16
  37.              GIVING WS-HEX-1 REMAINDER WS-HEX-2
  38.          
  39.          ADD 1 TO WS-HEX-1, WS-HEX-2
  40.          
  41.          MOVE TBL-HEX(WS-HEX-1:1) TO LNK-OUTPUT(IDX-S:1)
  42.          ADD 1 TO IDX-S
  43.          MOVE TBL-HEX(WS-HEX-2:1) TO LNK-OUTPUT(IDX-S:1)
  44.              
  45.          ADD 1 TO IDX-1, IDX-S
  46.      END-PERFORM
  47.      
  48.      GOBACK
  49.      .

No olvides lo de ALPHAL(WORD) e incluir la KERNEL32.LIB.

Resultados:
Valorsha256
105.02.1145A5AC763720497A3054E1A5C1C24DB458CE0C30 79F9AD2AB9496EAF9EAC087B
115.01.112B83108827E847A74B0886AB2E532E3F79988131 A61546499C3B08F32E4DB9F5
207.99.998189CCD84246547FD968902606574828E03D332D 2A9D65D9FCA11868303CA8B9
247.97.99D9DCC2614B2499CCEEF96484C65855258D7CD2AF 8DEA2E5079C7F13860D9C323


¡¡¡Esto ya NO PUEDE fallar!!!
Archivos Adjuntos
Tipo de Archivo: zip libcrypto.zip (720,2 KB)Descargas: 13



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita