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:image
导出参数:EV_BASE64 TYPE STRING.

参考加密网址https://www.toolhelper.cn/AsymmetricEncryption/RSA

posted @ 2025-12-10 10:58  hcw819  阅读(0)  评论(0)    收藏  举报