加密/解密算法(Unicode版本和None-Unicode版本)

 

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 .
=  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 .

=  STRLEN (  line  ).
=   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
=  STRLEN (  STRING  ).
=  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
=  STRLEN (  STRING  ).  I  =   0 .
=  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

 

注意点:

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编码方式会编码出错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值