ABAP AES加密解密
导语:最近修改一个银企直连的接口,涉及到对内容进行AES加密,首先进行需要用abapgit导入一个类,地址如下https://github.com/Sumu-Ning/AES,然后使用这个类里的方法实现加密,有伙伴反应这个网站打不开,可以通过私信或者邮箱联系我发代码。
下面分享的是AES的256加密算法过程
AES有几个关键元素:
(1)KEY密钥:这个密钥应该是长度16位随机生成的,也可以是约定好的。
(2)IV向量:向量会影响结果的值,这里先默认十六个0
一、加密
先将KEY,IV,加密串转成xstring类型,填充模式使用PKCS7(也可以使用PKCS5),块密码模式这里使用的是CBC,可以根据需求使用其他模式,加密之后的串也是xstirng类型,需要转一下BASE64。
DATA:lv_encrypt TYPE string. "加密前的string类型
DATA:lv_encrypt_x TYPE xstring. "加密前的xstring类型
DATA:lv_encrypt_after TYPE string. "加密后的string类型
DATA:lv_encrypt_after_x TYPE xstring. "加密后的xstring类型
DATA:lv_key TYPE string VALUE 'y5red17ocg5voImq', "key 密钥
lv_iv TYPE string VALUE '0000000000000000'. "iv 向量
DATA : lv_key_x TYPE xstring.
DATA : lv_iv_x TYPE xstring.
lv_encrypt = '5d1ceafcbd05470ca2fe969bed2e6151'. "加密前的数据
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_key
IMPORTING
buffer = lv_key_x
EXCEPTIONS
failed = 1.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_iv
IMPORTING
buffer = lv_iv_x
EXCEPTIONS
failed = 1.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_encrypt
IMPORTING
buffer = lv_encrypt_x
EXCEPTIONS
failed = 1.
" encrypt using AES256
zcl_aes_utility=>encrypt_xstring(
EXPORTING
i_key = lv_key_x
i_data = lv_encrypt_x
i_initialization_vector = lv_iv_x
i_padding_standard = zcl_byte_padding_utility=>mc_padding_standard_pkcs_7 "字节填充模式
i_encryption_mode = zcl_aes_utility=>mc_encryption_mode_cbc
IMPORTING
e_data = lv_encrypt_after_x
).
WRITE:'加密前:', lv_encrypt.
CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
EXPORTING
input = lv_encrypt_after_x
IMPORTING
output = lv_encrypt_after.
WRITE:/ '加密后:', lv_encrypt_after.
测试结果:
二、解密
先将KEY,IV转成xstring类型,密文转成BASE64,填充模式使用PKCS7(也可以使用PKCS5),块密码模式这里使用的是CBC,可以根据需求使用其他模式,加密之后的串也是xstirng类型,需要转一下string类型。
DATA:lv_decrypt TYPE string, "解密前的string类型
lv_decrypt_x TYPE xstring. "解密前的xstring类型
DATA:lv_decrypt_after TYPE string, "解密后的string类型
lv_decrypt_after_x TYPE xstring. "解密后的xstring类型
DATA:lv_key TYPE string VALUE 'IGcHiC4QUCXUlOx0', "key 设置对称算法的密钥
lv_iv TYPE string VALUE '0000000000000000'. "iv 设置对称算法的初始化向量
DATA lv_key_x TYPE xstring .
DATA lv_iv_x TYPE xstring .
lv_decrypt = 'GQ3225d7mwmj3pbHoBRsL5piGEdiYWy9pB9YwpkLkNdKMuPOd5etReMf3hgES0zdCxGsHoOjCnPLru BgeXPz1tLEXGlp3' &&
'q+Xk2K3Re+PMMs+qK1RAmpJpLB5w2pKMhqTKXeh2nKlGFgyHn6tgjRiAzwTM0nWM' &&
'cYFoDJZPw6kJOHLEF40zv6FSfnk7NvFrG44TdF/B/NAR4FGOKC+AmJhtYxUnXlvkt3wDxqGjHML3//b B1xLWmluBEANj5NXveq+'.
" base64 --> xstring
CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
b64data = lv_decrypt
IMPORTING
bindata = lv_decrypt_x
EXCEPTIONS
ssf_krn_error = 1
ssf_krn_noop = 2
ssf_krn_nomemory = 3
ssf_krn_opinv = 4
ssf_krn_input_data_error = 5
ssf_krn_invalid_par = 6
ssf_krn_invalid_parlen = 7.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_key
IMPORTING
buffer = lv_key_x
EXCEPTIONS
failed = 1.
"string --> xstring
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_iv
IMPORTING
buffer = lv_iv_x
EXCEPTIONS
failed = 1.
" AES解密
zcl_aes_utility=>decrypt_xstring(
EXPORTING
i_key = lv_key_x
i_data = lv_decrypt_x
i_initialization_vector = lv_iv_x
i_encryption_mode = zcl_aes_utility=>mc_encryption_mode_cbc
i_padding_standard = zcl_byte_padding_utility=>mc_padding_standard_pkcs_7 "字节填充模式
IMPORTING
e_data = lv_decrypt_after_x ).
WRITE: / '解密前:' , lv_decrypt.
"Xstring --> string
lv_decrypt_after = cl_abap_codepage=>convert_from(
EXPORTING
source = lv_decrypt_after_x
).
WRITE: / '解密后:' , lv_decrypt_after.
测试结果
以上就是AES加密解密的过程,需要使用可以封装到函数或者类中。
提示:文中的测试验证程序是项目上的一个顾问写的,可以实现AES和RSA的加密解密结果验证,我放在了资源中。
作者:小飞猪猪猪猪猪猪猪–CSDN
post SAP-Garson
原文链接:https://blog.csdn.net/JYH1999/article/details/117693665文章来自于网络,如果侵犯了您的权益,请联系站长删除!