加载中…
个人资料
SAP刘梦
SAP刘梦
  • 博客等级:
  • 博客积分:0
  • 博客访问:13,971
  • 关注人气:96
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SAP数字签名MD5Base64

(2022-04-10 17:00:17)
标签:

abap

liumeng

sap

干货铺

杂谈

分类: 偶尔会用到的东西

货铺QQ群号:834508274


微信群不能扫码进了,可以加我微信SAPliumeng拉进群,申请时请提供您哪个模块顾问,否则是一律不通过的。

进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程序等,进群看公告,谢谢配合

不修改昵称会被不定期踢除,谢谢配合!



本文参考文档

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


自己整理了一下而已。


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

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


SAP数字签名MD5Base64

SAP数字签名MD5Base64

SAP数字签名MD5Base64

看第四点即可。


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数字签名MD5Base64

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_utf8 EXPORTING unencoded = l_input RECEIVING encoded = l_xstring EXCEPTIONS conversion_failed = 1 OTHERS = 2.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.
* 进行Md5加密CALL FUNCTION 'CALCULATE_HASH_FOR_RAW' EXPORTING alg = 'MD5' data = l_xstring* LENGTH = 0 IMPORTING* hash = l_h160* HASHLEN =* HASHX =* HASHXLEN =* hashstring = hashxstring = l_xhstring* hashb64string = l_64 EXCEPTIONS unknown_alg = 1 param_error = 2 internal_error = 3 OTHERS = 4.* 通过BASE64生成数字签名CALL FUNCTION 'SCMS_BASE64_ENCODE_STR' EXPORTING input = l_xhstring IMPORTING output = l_base64.WRITE:/ '最终经过MD5、BASE64加密后的字符串:',l_base64.


SAP数字签名MD5Base64

BASE64生成的签名:  IIKJtuLVzoFTu4kHI8M8vA==



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


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


推荐阅读:

动态批量修改任意表任意字段的值

动态获取查询条件的一个小Demo

使用cl_gui_docking_container 实现多ALV》

VOFM 修改 组单开票时 会计凭拆分规则

DEMO SUBMIT 某程序并获取该程序ALV数据

DEMO:S/4 1809 FAGLL03H 增加字段增强

几个ABAP实用模板,体力活就别一行行敲了,复制粘贴得了

DEMO:BTE增强实现凭证创建检查

SAP Parallel Accounting(平行分类账业务)配置 操作手册 BAPI demo程序

CC02修改确认日期BAPI:Processing of change number  was canceled

我是怎样调试BAPI的,以F-02为例

女儿的部分书单

推荐几本小说吧,反正过年闲着也是闲着,看看呗

我是不是被代码给耽误了……不幸沦为一名程序员……

三亚自由行攻略(自己穷游总结)

苏州游记

杂谈:说走就走的旅行没那么难

溜达:无锡

20110214--20210214

不一样的SAP干货铺群:帅哥靓妹、红包、烤羊腿!

十年老码农搬砖习惯和技巧

我这个老码农是怎么debug标准程序的

我是怎样调试BAPI的,以F-02为例

杂谈:几种接口

《干货来袭:2020年公众号内容汇总

Odata 增删改查详例

ODATA CREATE_DEEP_ENTITY 详例

RESTful DEMO 一:SAP 如何提供 RESTful Web 服务

RESTful DEMO 四 :增删改查及调用

DEMO  search help 增强 ( vl03n KO03 等)

录BDC时  弹出的公司代码框问题

动态获取查询条件的一个小Demo

动态批量修改任意表任意字段的值

 

WDA Demo

WDA  DEMO 0:开启服务 设置hosts
WDA  DEMO 02: 简单介绍
WDA  DEMO 03: 根据选择条件查询并显示
WDA  DEMO 04: select options 查询并显示
WDA  DEMO 05:两个table联动展示数据
WDA  DEMO 06: 创建事务代码
WDA  DEMO 07 页面跳转及全局变量的使用
WDA  DEMO 08 全局变量方式二
WDA  DEMO 09 ALV 简单展示
WDA  DEMO 1:简单查询并显示结果
WDA  DEMO 10 代码模块化整理
WDA  DEMO 11 根据BAPI/Function创建WDA




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有