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 .
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 .
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: homedir paylist . 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: homedir paylist . 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: homedir paylist2 . txt'
* FILETYPE = 'ASC'
* TABLES
* DATA_TAB = lines2
* EXCEPTIONS
* INVALID_FILESIZE = 1
* INVALID_TABLE_WIDTH = 2
* INVALID_TYPE = 3 .
ENDFORM . " Out2Interface
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: homedir paylist . 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: homedir paylist . 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: homedir paylist2 . 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编码方式会编码出错。