首页 > 其他分享 >SAP 数字签名 MD5 Base64

SAP 数字签名 MD5 Base64

时间:2022-10-14 23:34:42浏览次数:76  
标签:加密 数字签名 报文 Base64 msgData input SAP MD5




本文参考文档:

​http://www.baidusap.com/abap/7408​


自己整理了一下而已。


首先看下顺丰的官方文档:

​http://qiao.sf-express.com/pages/developDoc/index.html?level2=922308​


SAP 数字签名 MD5  Base64_数字签名


SAP发送 报文。

发送的参数列表是


参数列表

类型

是否必传

含义

partnerID

String(64)

Y

合作伙伴编码(即顾客编码)

requestID

String(40)

Y

请求唯一号UUID

serviceCode

String(50)

Y

接口服务代码(到API接口详情查看具体服务代码)

timestamp

long

Y

调用接口时间戳

msgDigest

String(128)

Y

数字签名

msgData

String

Y

业务数据报文

SAP 数字签名 MD5  Base64_数据_02


看第四点即可。


1、在请求时用“msgData”字段表示要发送的JSON内容;


2、在POST时用“msgDigest”字段进行签名验证。签名使用MD5方式,对msgData的内容进行签名。 


msgData(业务报文)+ timestamp+checkWord(客户校验码),经过URLEncoder.encode((msgData+timeStamp+checkWord),"UTF-8")后进行MD5,

最后在转换为Base64字符串


详细解释如下: 

假设json内容为:{"language":"zh-CN","orderId":"QIAO-20200618-004"} , 

时间戳为12312334453453,

校验码为fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci

那么要签名的内容为

{"language":"zh-CN","orderId":"QIAO-20200618-004"}12312334453453fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci(默认UTF-8编码),

经过md5和base64后的内容就为IIKJtuLVzoFTu4kHI8M8vA==


最终要发送的数据为 msgData={"language":"zh-CN","orderId":"QIAO-20200618-004"}& msgDigest = IIKJtuLVzoFTu4kHI8M8vA==


其实就是对应的

SAP 数字签名 MD5  Base64_字符串_03


MD5 加密,需要双方都知道这对秘钥。

比如这里可以双方存一份,每个合作伙伴对应的秘钥。

也就是文档里的 校验码:fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci

这个东西是不对外的。

最后的数字签名就是:

IIKJtuLVzoFTu4kHI8M8vA==


那SAP这边,实现demo


DATA:l_xstring  TYPE xstring,l_base64   TYPE string,l_xhstring TYPE xstring.
DATA:l_input TYPE string VALUE '{"language":"zh-CN","orderId":"QIAO-20200618-004"}12312334453453fjcg5PGKaNpPSHFAZ4QsCOkV71R3zVci'.
WRITE:`需要加密的字符串:`,l_input.
* 将需要加密的字符串转换成RUI格式l_input = escape( val = l_input format = cl_abap_format=>e_uri_full ).WRITE:/ `URI转换后的字符串: `,l_input.
* 转换成UTF-8CALL METHOD cl_http_utility=>if_http_utility~encode_utf8EXPORTINGunencoded = l_inputRECEIVINGencoded = l_xstringEXCEPTIONSconversion_failed = 1OTHERS = 2.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.
* 进行Md5加密CALL FUNCTION 'CALCULATE_HASH_FOR_RAW'EXPORTINGalg = 'MD5'data = l_xstring* LENGTH = 0IMPORTING* hash = l_h160* HASHLEN =* HASHX =* HASHXLEN =* hashstring =hashxstring = l_xhstring* hashb64string = l_64EXCEPTIONSunknown_alg = 1param_error = 2internal_error = 3OTHERS = 4.* 通过BASE64生成数字签名CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'EXPORTINGinput = l_xhstringIMPORTINGoutput = l_base64.WRITE:/ '最终经过MD5、BASE64加密后的字符串:',l_base64.

执行结果

SAP 数字签名 MD5  Base64_数据_04

BASE64生成的签名:  IIKJtuLVzoFTu4kHI8M8vA==



对方拿到这个 报文+时间戳后,取自己这边保存的秘钥,然后同时也用MD5 加密 再生成签名,如果跟 收到的数字签名一致。说明报文数据没发生过篡改。


这算是SAP比较常用的,也是比较简单的加密。



标签:加密,数字签名,报文,Base64,msgData,input,SAP,MD5
From: https://blog.51cto.com/u_15680210/5758079

相关文章