1 Introduction
This is a SAP RSA encryption .
2 Example
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_base64 TYPE string,
lv_pubkey TYPE xstring,
lv_pubbase64 TYPE string,
lv_str TYPE string.
lv_input = iv_userid.
lv_input_x = cl_bcs_convert=>string_to_xstring( lv_input ).
CASE sy-mandt .
WHEN '150'.
" 公钥(固定参数)加密
lv_pubbase64 =
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl4mK2FfF1KpL23SMPX4RL3'
&& 'BcdFPfDQ4QLmoTuIG41Z8Hb2YZ4XjGxmrsIDfWV3M15IDu+e/xG6J0oZg1lSV8azQzc9H0V'
&& '5Bje9c4pJtxCx1WluditiCpsLzQT/Y8QUkYIy/0DGNKu3NnNx8Qe2S9IBUT5xbUuWCQ7HGKw'
&& 'KyYq+U5kNGMM5VS7UTCEpHW0ZrG1MBtPLkwBmuZ/tW1YlImeN1nce3N9xqMtdIw+3Kim4u'
&& 'VcXAk3sjLzwwZbv76W0a5btUuZtEyC/EVZjk9xGMbYM5lJxw0ouNOilxYKvbwny5EsRWeAWF'
&& 'l8e2ybEQ6xCrm+hOPKaJT5nzBjyJ0sBcVwwIDAQAB'.
WHEN '800'.
" 公钥(固定参数)加密
lv_pubbase64 =
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnASjMejEpL8O+vu1JxBXvGlzReRZjb20RxwlDMkM2LZUyMB0OYoyN'
&& '0MVCzftWZV0C89gtcC/+zslD/MXDQXnNwoHL5ej4LEgbZ4en2nwBSIvTMmueZ0QGONvGnBz5JpaR0p7RKnExu3qP9SOuaVjTR'
&& 'v1q4Itv5aqIi3311umu8KzvkRoNUH5oauHTBI3suZP30hIgDy4XqOrcJ61NoPmN3V+lJvCmAiUcStcKeEtM9q6dL8m9i6dpf12Zhm'
&& '4cseGLRGSxC8Zx+Mi5lcQb251/xL+EXqNGFOdadmhWpR9zJve8iIxvrqzJOHp7aMv3tdcI9kkKw0YEiY4VX0ch//ASwIDAQAB'.
WHEN OTHERS.
ENDCASE.
CALL FUNCTION 'SCMS_BASE64_DECODE_STR'
EXPORTING
input = lv_pubbase64
* UNESCAPE = 'X'
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:'.
lv_pubkey = cl_bcs_convert=>string_to_xstring( lv_str ).
ls_recipient_list-id = '<implicit>'."
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 = lv_base64.
ev_out = lv_base64.

501

被折叠的 条评论
为什么被折叠?



