AES为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。
FUNCTION zaes_envelope .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IV_INPUT) TYPE STRING
*" VALUE(IV_KEY) TYPE STRING
*" VALUE(IV_IV) TYPE STRING
*" EXPORTING
*" VALUE(EV_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA:
lv_encrypt_x TYPE xstring, "加密前的xstring类型
lv_encrypt_after_x TYPE xstring, "加密后的xstring类型
lv_key_x TYPE xstring,
lv_iv_x TYPE xstring.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = iv_key
IMPORTING
buffer = lv_key_x
EXCEPTIONS
failed = 1.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = iv_iv
IMPORTING
buffer = lv_iv_x
EXCEPTIONS
failed = 1.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = iv_input
IMPORTING
buffer = lv_encrypt_x
EXCEPTIONS
failed = 1.
" encrypt using AES256
cl_sec_sxml_writer=>encrypt_iv(
EXPORTING
plaintext = lv_encrypt_x
key = lv_key_x
iv = lv_iv_x
" algorithm = cl_sec_sxml_writer=>co_aes256_algorithm_pem
algorithm = cl_sec_sxml_writer=>co_aes128_algorithm_pem
IMPORTING
ciphertext = DATA(lv_message) ).
lv_encrypt_after_x = lv_message+16.
CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
EXPORTING
input = lv_encrypt_after_x
IMPORTING
output = ev_output.
ENDFUNCTION.
参数说明: