You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ABAP中使用RSA-PSS算法生成签名?求代码示例

ABAP实现SHA256withRSA/PSS签名示例

以下是替换原SSFW_KRN_SIGN函数PKCS1-V1.5签名为SHA256withRSA/PSS算法的代码示例:

DATA:
  lv_data          TYPE xstring,
  lv_signature     TYPE xstring,
  lv_key_name      TYPE string VALUE 'YOUR_KEY_ALIAS', " 替换为实际密钥别名
  lv_hash_alg      TYPE string VALUE 'SHA256',
  lv_format        TYPE string VALUE 'PSS',
  ls_ssfw_key      TYPE ssfw_key,
  lv_error_msg     TYPE string.

* 1. 转换待签名文本为XSTRING(UTF-8编码)
lv_data = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' )->convert( '需要签名的内容' ).

* 2. 获取目标密钥信息
CALL FUNCTION 'SSFW_KRN_GET_KEY'
  EXPORTING
    key_name = lv_key_name
  IMPORTING
    key      = ls_ssfw_key
  EXCEPTIONS
    OTHERS   = 1.
IF sy-subrc <> 0.
  MESSAGE '密钥获取失败' TYPE 'E' DISPLAY LIKE 'E'.
ENDIF.

* 3. 执行SHA256withRSA/PSS签名
CALL FUNCTION 'SSFW_KRN_SIGN'
  EXPORTING
    key            = ls_ssfw_key
    data           = lv_data
    str_hash       = lv_hash_alg
    str_format     = lv_format
    pss_saltlen    = 32 " 盐长度匹配SHA256哈希输出长度(32字节),符合RFC规范
  IMPORTING
    signature      = lv_signature
  EXCEPTIONS
    invalid_key    = 1
    hash_failed    = 2
    sign_failed    = 3
    OTHERS         = 4.

IF sy-subrc <> 0.
  CALL FUNCTION 'SSFW_KRN_GET_ERROR'
    IMPORTING
      error_text = lv_error_msg.
  MESSAGE lv_error_msg TYPE 'E' DISPLAY LIKE 'E'.
ENDIF.

* 可选:将签名转换为Base64格式便于传输/存储
DATA(lv_base64_sign) = cl_http_utility=>encode_xstring( lv_signature ).
WRITE: / 'Base64签名结果:', lv_base64_sign.

关键说明

  • str_format参数设置为'PSS',搭配str_hash = 'SHA256',即可实现SHA256withRSA/PSS签名
  • pss_saltlen参数建议设置为对应哈希算法的输出长度(SHA256为32字节),这是RFC 8017推荐的配置
  • 需确保在事务码STRUST中已配置支持RSA-PSS的密钥对,且密钥别名正确

内容的提问来源于stack exchange,提问作者PhilippWa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:45:26