ABAP RSA加密
最近在和OA对接需要用到RSA公钥加密,所以这边参考别人的代码写了一个通用函数。
`FUNCTION zrsajm.
*"----------------------------------------------------------------------
""本地接口:
*" IMPORTING
*" REFERENCE(CS_REGIST) TYPE ZOA_S_001
*" EXPORTING
*" REFERENCE(EV_BASE64) TYPE STRING
*"----------------------------------------------------------------------
DATA: lv_output TYPE xstring,
lv_input_x TYPE xstring,
lv_input TYPE string,
lv_crc TYPE ssfparms-ssfcrc,
lt_recipient_list TYPE STANDARD TABLE OF ssfinfo,
ls_recipient_list LIKE LINE OF lt_recipient_list.
DATA:
lv_pubkey TYPE xstring,
lv_pubbase64 TYPE string,
lv_str TYPE string.
lv_input = cs_regist-secret."解析的文本
TRY.
lv_input_x = cl_bcs_convert=>string_to_xstring( lv_input ).
CATCH cx_bcs .
ENDTRY.
" 加密
lv_pubbase64 = cs_regist-spk."公钥
CALL FUNCTION 'SCMS_BASE64_DECODE_STR'
EXPORTING
input = lv_pubbase64
IMPORTING
output = lv_pubkey
EXCEPTIONS
failed = 1
OTHERS = 2.
" 模数 参考加密概述
lv_str = lv_pubkey.
DATA(length) = strlen( lv_str ).
IF length > 514." 2048位密钥
DATA(pos) = length - 10 - 514.
lv_str = lv_str+pos(514).
ELSEIF length > 256." 1024位密钥
pos = length - 10 - 256.
lv_str = lv_str+pos(256).
ENDIF.
" 函数使用密钥格式
lv_str = 'R:m=' && lv_str && ':e=010001:'.
TRY.
lv_pubkey = cl_bcs_convert=>string_to_xstring( lv_str ).
CATCH cx_bcs .
ENDTRY.
ls_recipient_list-id = '
APPEND ls_recipient_list TO lt_recipient_list.
CALL FUNCTION 'SSFW_KRN_ENVELOPE'
EXPORTING
str_format = 'PKCS1-V1.5'
str_pab = '<no_certificate_check>'
str_chainfmt = 'KEYVALUE'
ostr_chain_data = lv_pubkey
ostr_input_data = lv_input_x
IMPORTING
ostr_enveloped_data = lv_output
crc = lv_crc
TABLES
recipient_list = lt_recipient_list
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
EXPORTING
input = lv_output
IMPORTING
output = ev_base64.
ENDFUNCTION.`
导入参数CS_REGIST:
导出参数:EV_BASE64 TYPE STRING.
参考加密网址https://www.toolhelper.cn/AsymmetricEncryption/RSA

浙公网安备 33010602011771号