FORM FRM_RSA_ENCODE USING PV_INPUT TYPE STRING PV_SPK TYPE STRING CHANGING PV_SECRET TYPE STRING
CV_FLAG TYPE CHAR01 CV_MESS 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_BASE64 TYPE STRING,
LV_PUBKEY TYPE XSTRING,
LV_PUBBASE64 TYPE STRING,
LV_STR TYPE STRING.
LV_INPUT = PV_INPUT .
LV_INPUT_X = CL_BCS_CONVERT=>STRING_TO_XSTRING( LV_INPUT ).
" 加密
LV_PUBBASE64 = PV_SPK .
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 = '
APPEND LS_RECIPIENT_LIST TO LT_RECIPIENT_LIST.
CALL FUNCTION 'SSFW_KRN_ENVELOPE'
EXPORTING
STR_FORMAT = 'PKCS1-V1.5'
STR_PAB = '
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.
PV_SECRET = LV_BASE64.
ENDFORM.