ABAP字符串的加密与解密


FIEB_PASSWORD_DECRYPT:字符串解密;
FIEB_PASSWORD_ENCRYPT:字符串加密。
旧版本的可以用。

 1 PARAMETERS:str1 type char32 OBLIGATORY,
 2             str2 TYPE char32,
 3             str3 TYPE char32.
 4 INITIALIZATION.
 5 clear:str2,str3.
 6 AT SELECTION-SCREEN output.
 7   if not str1 is INITIAL.
 8   CALL FUNCTION 'FIEB_PASSWORD_ENCRYPT'
 9     EXPORTING
10        im_decrypted_password        = STR1
11    IMPORTING
12       EX_ENCRYPTED_PASSWORD         = STR2 .
13   CALL FUNCTION 'FIEB_PASSWORD_DECRYPT'
14     EXPORTING
15        im_encrypted_password        = STR2
16    IMPORTING
17       EX_DECRYPTED_PASSWORD         = STR3   .
18 endif.


新版中可以使用类接口CL_HARD_WIRED_ENCRYPTOR的静态方法实现。

 1 DATA:   o_encryptor        TYPE REF TO cl_hard_wired_encryptor,
 2         o_cx_encrypt_error TYPE REF TO cx_encrypt_error.
 3 DATA:   v_ac_string  TYPE string VALUE 'Welcome to ABAP',
 4         v_ac_xstring TYPE xstring,
 5         v_en_string  TYPE string,
 6         v_en_xstring TYPE xstring,
 7         v_de_string  TYPE string,
 8         v_de_xstring TYPE xstring,
 9         v_error_msg  TYPE string.
10 START-OF-SELECTION.
11   CREATE OBJECT o_encryptor.
12   WRITE / 'Encryption - String to String'.
13   TRY.
14       CALL METHOD o_encryptor->encrypt_string2string
15         EXPORTING
16             the_string = v_ac_string
17           RECEIVING
18             result       = v_en_string.
19     CATCH cx_encrypt_error INTO o_cx_encrypt_error.
20       CALL METHOD o_cx_encrypt_error->if_message~get_text
21           RECEIVING
22             result = v_error_msg.
23       MESSAGE v_error_msg TYPE 'E'.
24   ENDTRY.
25   WRITE:/ 'Actual String: ', v_ac_string.
26   WRITE:/ 'Encrypted String: ', v_en_string.
27   SKIP.
28   WRITE / 'Decryption - String to String'.
29   TRY.
30       CALL METHOD o_encryptor->decrypt_string2string
31         EXPORTING
32             the_string = v_en_string
33           RECEIVING
34             result       = v_de_string.
35     CATCH cx_encrypt_error INTO o_cx_encrypt_error.
36       CALL METHOD o_cx_encrypt_error->if_message~get_text
37           RECEIVING
38             result = v_error_msg.
39       MESSAGE v_error_msg TYPE 'E'.
40   ENDTRY.
41 
42   WRITE:/ 'Encrypted String: ', v_en_string.
43   WRITE:/ 'Decrypted String: ', v_de_string.
44   SKIP. 

-----------------------------------------------------------------------------

 1 report ztest1 MESSAGE-ID F4.
 2 DATA: o_encryptor        TYPE REF TO cl_hard_wired_encryptor,
 3       o_cx_encrypt_error TYPE REF TO cx_encrypt_error.
 4 
 5 DATA: v_ac_string  TYPE string VALUE 'Welcome to ABAP',
 6       v_ac_xstring TYPE xstring,
 7       v_en_string  TYPE string,
 8       v_en_xstring TYPE xstring,
 9       v_de_string  TYPE string,
10       v_de_xstring TYPE string,
11       v_error_msg  TYPE string.
12 
13 START-OF-SELECTION.
14 
15 * Create object for Encryption
16   CREATE OBJECT o_encryptor.
17 * *&---------------------------------------------------------------------*
18 * Encryption - String to String
19 *&---------------------------------------------------------------------*
20 WRITE / 'Encryption - String to String'.
21   TRY.
22       CALL METHOD o_encryptor->encrypt_string2string
23         EXPORTING
24           the_string = v_ac_string
25         RECEIVING
26           result     = v_en_string.
27     CATCH cx_encrypt_error INTO o_cx_encrypt_error.
28       CALL METHOD o_cx_encrypt_error->if_message~get_text
29         RECEIVING
30           result = v_error_msg.
31       MESSAGE v_error_msg TYPE 'E'.
32   ENDTRY.
33 
34   WRITE:/ 'Actual String: ', v_ac_string.
35   WRITE:/ 'Encrypted String: ', v_en_string.
36   SKIP.
37 
38 *&---------------------------------------------------------------------*
39 * Decryption - String to String
40 *&---------------------------------------------------------------------*
41 WRITE / 'Decryption - String to String'.
42   TRY.
43       CALL METHOD o_encryptor->decrypt_string2string
44         EXPORTING
45           the_string = v_en_string
46         RECEIVING
47           result     = v_de_string.
48     CATCH cx_encrypt_error INTO o_cx_encrypt_error.
49       CALL METHOD o_cx_encrypt_error->if_message~get_text
50         RECEIVING
51           result = v_error_msg.
52       MESSAGE v_error_msg TYPE 'E'.
53   ENDTRY.
54 
55   WRITE:/ 'Encrypted String: ', v_en_string.
56   WRITE:/ 'Decrypted String: ', v_de_string.