본문 바로가기
ABAP/Function|Class

[Class] CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR - 문자열 Hash

by name_text 2023. 7. 24.

CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR

CALCULATE_HASH_FOR_CHAR

문자열을 MD5, SHA1, SHA256, SHA512 로 해싱

 

비밀번호의 해싱과 같이 여러 용도로 사용할 수 있습니다.

 

HMAC 해싱의 경우 CL_ABAP_HMAC 클래스나 CALCULATE_HMAC_FOR_CHAR 펑션을 이용하면 됩니다.

 

 

 

# 사용예시

PARAMETERS: P_TXT TYPE STRING LOWER CASE OBLIGATORY.
DATA LV_STR TYPE STRING.

START-OF-SELECTION.

FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE:/ 'Original Text'.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/ P_TXT.

SKIP 2.

PERFORM HASH_STRING USING: 'SHA1',
                           'SHA256',
                           'SHA512',
                           'MD5'.

*&---------------------------------------------------------------------*
*& Form HASH_STRING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM HASH_STRING  USING P_ALG.
  DATA LV_ERR TYPE REF TO CX_ABAP_MESSAGE_DIGEST.
  FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
  WRITE:/ P_ALG.
  FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

  TRY.
    CALL METHOD CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR
      EXPORTING
        IF_ALGORITHM     = CONV STRING( P_ALG )
        IF_DATA          = P_TXT
*        IF_LENGTH        = 0
       IMPORTING
*        EF_HASHSTRING    =
*        EF_HASHXSTRING   =
         EF_HASHB64STRING = LV_STR
*        EF_HASHX         =
        .
  CATCH CX_ABAP_MESSAGE_DIGEST INTO LV_ERR.
    LV_STR = LV_ERR->GET_TEXT( ).
  ENDTRY.
  WRITE:/ LV_STR.

  CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
    EXPORTING
      ALG                  = CONV HASHALG( P_ALG )
      DATA                 = P_TXT
*     LENGTH               = 0
    IMPORTING
*     HASH                 =
*     HASHLEN              =
*     HASHX                =
*     HASHXLEN             =
*     HASHSTRING           =
*     HASHXSTRING          =
      HASHB64STRING        = LV_STR
    EXCEPTIONS
      UNKNOWN_ALG          = 1
      PARAM_ERROR          = 2
      INTERNAL_ERROR       = 3
      OTHERS               = 4
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 INTO LV_STR.
  ENDIF.
  WRITE:/ LV_STR.

  SKIP.
ENDFORM.
ABAP

 

댓글