Unicode版本:
data: key(8) value '12345678'.
DATA: I TYPE I, J TYPE I.
DATA: BEGIN OF A,
1(2) TYPE X, 2(2) TYPE X, 3(2) TYPE X, 4(2) TYPE X,
5(2) TYPE X, 6(2) TYPE X, 7(2) TYPE X, 8(2) TYPE X,
END OF A.
DATA: BEGIN OF B,
1(2) TYPE X, 2(2) TYPE X, 3(2) TYPE X, 4(2) TYPE X,
5(2) TYPE X, 6(2) TYPE X, 7(2) TYPE X, 8(2) TYPE X,
END OF B.
DATA: BEGIN OF C,
1(2) TYPE X, 2(2) TYPE X, 3(2) TYPE X, 4(2) TYPE X,
5(2) TYPE X, 6(2) TYPE X, 7(2) TYPE X, 8(2) TYPE X,
END OF C.
DATA: BEGIN OF D,
1(2) TYPE X, 2(2) TYPE X, 3(2) TYPE X, 4(2) TYPE X,
5(2) TYPE X, 6(2) TYPE X, 7(2) TYPE X, 8(2) TYPE X,
END OF D.
DATA: BEGIN OF E,
1(2) TYPE X, 2(2) TYPE X, 3(2) TYPE X, 4(2) TYPE X,
5(2) TYPE X, 6(2) TYPE X, 7(2) TYPE X, 8(2) TYPE X,
END OF E.


FORM Encrypt using value(line) changing line2.
J = STRLEN( line ). I = 0.
CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C
EXPORTING im_container = key
IMPORTING EX_VALUE = A
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
DO.
CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C
EXPORTING im_container = line+I
IMPORTING EX_VALUE = B
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
E = B.
IF SY-INDEX = 1.
B-1 = A-1 + B-1.B-2 = A-2 + B-2.B-3 = A-3 + B-3.B-4 = A-4 + B-4.
B-5 = A-5 + B-5.B-6 = A-6 + B-6.B-7 = A-7 + B-7.B-8 = A-8 + B-8.
ELSE.
B-1 = C-1 + D-1 + B-1.B-2 = C-2 + D-2 + B-2.
B-3 = C-3 + D-3 + B-3.B-4 = C-4 + D-4 + B-4.
B-5 = C-5 + D-5 + B-5.B-6 = C-6 + D-6 + B-6.
B-7 = C-7 + D-7 + B-7.B-8 = C-8 + D-8 + B-8.
ENDIF.
D = B. C = E.
CALL METHOD cl_abap_container_utilities=>FILL_CONTAINER_C
EXPORTING IM_VALUE = B
IMPORTING EX_CONTAINER = line2+I(8)
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
I = I + 8.
IF I >= J.
EXIT.
ENDIF.
ENDDO.
ENDFORM.

FORM Decrypt using value(line) changing line2.
J = STRLEN( line ).
I = 0.
CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C
EXPORTING im_container = key
IMPORTING EX_VALUE = A
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
DO.
CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C
EXPORTING im_container = line+I
IMPORTING EX_VALUE = B
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
E = B.
IF SY-INDEX = 1.
B-1 = B-1 - A-1.B-2 = B-2 - A-2.B-3 = B-3 - A-3.B-4 = B-4 - A-4.
B-5 = B-5 - A-5.B-6 = B-6 - A-6.B-7 = B-7 - A-7.B-8 = B-8 - A-8.
ELSE.
B-1 = B-1 - C-1 - D-1.B-2 = B-2 - C-2 - D-2.
B-3 = B-3 - C-3 - D-3.B-4 = B-4 - C-4 - D-4.
B-5 = B-5 - C-5 - D-5.B-6 = B-6 - C-6 - D-6.
B-7 = B-7 - C-7 - D-7.B-8 = B-8 - C-8 - D-8.
ENDIF.
D = B. C = E.
CALL METHOD cl_abap_container_utilities=>FILL_CONTAINER_C
EXPORTING IM_VALUE = B
IMPORTING EX_CONTAINER = line2+I(8)
EXCEPTIONS illegal_parameter_type = 1
OTHERS = 2.
I = I + 8.
IF I >= J.
EXIT.
ENDIF.
ENDDO.
ENDFORM. 
None-Unicode版本:
PARAMETERS: STRING(96), KEY(8).
PARAMETER ENCRYPT RADIOBUTTON GROUP RB.
PARAMETER DECRYPT RADIOBUTTON GROUP RB.
DATA: I TYPE I, J TYPE I.
DATA: BEGIN OF A,
1 TYPE X, 2 TYPE X, 3 TYPE X, 4 TYPE X,
5 TYPE X, 6 TYPE X, 7 TYPE X, 8 TYPE X,
END OF A.
DATA: BEGIN OF B,
1 TYPE X, 2 TYPE X, 3 TYPE X, 4 TYPE X,
5 TYPE X, 6 TYPE X, 7 TYPE X, 8 TYPE X,
END OF B.
DATA: BEGIN OF C,
1 TYPE X, 2 TYPE X, 3 TYPE X, 4 TYPE X,
5 TYPE X, 6 TYPE X, 7 TYPE X, 8 TYPE X,
END OF C.
DATA: BEGIN OF D,
1 TYPE X, 2 TYPE X, 3 TYPE X, 4 TYPE X,
5 TYPE X, 6 TYPE X, 7 TYPE X, 8 TYPE X,
END OF D.
DATA: BEGIN OF E,
1 TYPE X, 2 TYPE X, 3 TYPE X, 4 TYPE X,
5 TYPE X, 6 TYPE X, 7 TYPE X, 8 TYPE X,
END OF E.
WRITE: / STRING.
* encrypting
J = STRLEN( STRING ).
A = KEY.
DO.
B = STRING+I.
E = B.
IF SY-INDEX = 1.
B-1 = A-1 + B-1.B-2 = A-2 + B-2.B-3 = A-3 + B-3.B-4 = A-4 + B-4.
B-5 = A-5 + B-5.B-6 = A-6 + B-6.B-7 = A-7 + B-7.B-8 = A-8 + B-8.
ELSE.
B-1 = C-1 + D-1 + B-1.B-2 = C-2 + D-2 + B-2.
B-3 = C-3 + D-3 + B-3.B-4 = C-4 + D-4 + B-4.
B-5 = C-5 + D-5 + B-5.B-6 = C-6 + D-6 + B-6.
B-7 = C-7 + D-7 + B-7.B-8 = C-8 + D-8 + B-8.
ENDIF.
D = B. C = E.
STRING+I(8) = B.
I = I + 8.
IF I >= J.
EXIT.
ENDIF.
ENDDO.
WRITE: / STRING.
* decrypting
J = STRLEN( STRING ). I = 0.
A = KEY.
DO.
B = STRING+I.
E = B.
IF SY-INDEX = 1.
B-1 = B-1 - A-1.B-2 = B-2 - A-2.B-3 = B-3 - A-3.B-4 = B-4 - A-4.
B-5 = B-5 - A-5.B-6 = B-6 - A-6.B-7 = B-7 - A-7.B-8 = B-8 - A-8.
ELSE.
B-1 = B-1 - C-1 - D-1.B-2 = B-2 - C-2 - D-2.
B-3 = B-3 - C-3 - D-3.B-4 = B-4 - C-4 - D-4.
B-5 = B-5 - C-5 - D-5.B-6 = B-6 - C-6 - D-6.
B-7 = B-7 - C-7 - D-7.B-8 = B-8 - C-8 - D-8.
ENDIF.
D = B. C = E.
STRING+I(8) = B.
I = I + 8.
IF I >= J.
EXIT.
ENDIF.
ENDDO.
WRITE: / STRING.
Unicode版本的使用:
data: begin of lines occurs 0,
line(200),
end of lines.


FORM OUT2INTERFACE.
data: amount(15), tmp_line(200).
refresh lines.
loop at s_itab.
amount = s_itab-net_pay.
concatenate s_itab-name
amount
s_itab-zweck
s_itab-zbankdesc
into tmp_line
separated by ','.
perform encrypt using tmp_line changing lines-line.
append lines.
clear lines.
clear tmp_line.
endloop.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* codepage = '8400'
FILENAME = 'c:homedirpaylist.txt'
FILETYPE = 'BIN'
TABLES
DATA_TAB = lines
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3.

**** Just for Test******
*data: begin of lines2 occurs 0,
* line(200),
* end of lines2.
* refresh lines2.
* refresh lines.
* CALL FUNCTION 'GUI_UPLOAD'
* EXPORTING
** codepage = '8400'
* FILENAME = 'c:homedirpaylist.txt'
* FILETYPE = 'BIN'
* TABLES
* DATA_TAB = lines
* EXCEPTIONS
* INVALID_FILESIZE = 1
* INVALID_TABLE_WIDTH = 2
* INVALID_TYPE = 3.
*
* loop at lines.
* clear lines2.
* perform decrypt using lines-line changing lines2-line.
* append lines2.
* endloop.
*
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* codepage = '8400'
* FILENAME = 'c:homedirpaylist2.txt'
* FILETYPE = 'ASC'
* TABLES
* DATA_TAB = lines2
* EXCEPTIONS
* INVALID_FILESIZE = 1
* INVALID_TABLE_WIDTH = 2
* INVALID_TYPE = 3.
ENDFORM. "Out2Interface

注意点:
1-Unicode版本中使用CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C和CALL METHOD cl_abap_container_utilities=>READ_CONTAINER_C来实现string到structure的赋值,否则编译报错。
2-在Out2Interface Form中,当将加密内容写入文件中时,使用BIN方式写入,如果ASC/DAT编码方式会编码出错。
本文介绍了一种ABAP语言中的加密与解密方法,包括Unicode与非Unicode版本的实现细节。通过定义特定的数据结构并利用ABAP内置类进行字符串操作,实现了数据的安全转换。此外,还展示了如何将加密后的数据导出为文件,并读取文件进行解密的过程。
&spm=1001.2101.3001.5002&articleId=1630194&d=1&t=3&u=32c06d9d83034ec7b9c506028f127038)
851

被折叠的 条评论
为什么被折叠?



