SAP数字签名MD5Base64

货铺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发送 报文。

发送的参数列表是


参数列表 类型 是否必传 含义
partnerID String(64) Y 合作伙伴编码(即顾客编码)
requestID String(40) Y 请求唯一号UUID
serviceCode String(50) Y 接口服务代码(到API接口详情查看具体服务代码)
timestamp long Y 调用接口时间戳
msgDigest String(128) Y 数字签名
msgData String Y 业务数据报文

看第四点即可。


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==


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.


BASE64生成的签名:  IIKJtuLVzoFTu4kHI8M8vA==



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


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


推荐阅读:

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时  弹出的公司代码框问题

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

ALV DEMO

ALV  demo  01:cl_salv_table 简单输出
ALV  demo  02:cl_salv_table 添加排序和汇总
ALV  demo  03:cl_salv_table :Add Header (Top of page)
ALV  demo  04:cl_salv_table (ICONs and Tooltips)
ALV  demo  05:cl_salv_table(Apply Styles to Cell)
ALV  demo  06:cl_salv_table event
ALV  demo 07:  CL_SALV_TABLE 设置可编辑
ALV  demo  08:cl_salv_table (check box)
ALV  demo  09:cl_salv_table ALV 弹出框
ALV  :汇总,分类汇总(小计),排序,过滤
ALV  DMEO 01:REUSE_ALV_GRID_DISPLAY 简单输出
ALV  DMEO 02:REUSE_ALV_GRID_DISPLAY 使用函数填充 FIELDCAT
ALV  DMEO 03:REUSE_ALV_GRID_DISPLAY 使用函数填充 FIELDCAT(2)
ALV  DMEO 04:REUSE_ALV_GRID_DISPLAY 固定列
ALV  DMEO 05:REUSE_ALV_GRID_DISPLAY 设置某列颜色
ALV  DMEO 06:REUSE_ALV_GRID_DISPLAY 红绿灯
ALV  DMEO 07:REUSE_ALV_GRID_DISPLAY 使用TOP_OF_PAGE
ALV  DMEO 08:REUSE_ALV_GRID_DISPLAY 使用I_CALLBACK_HTML_TOP_OF_PAGE
ALV  DMEO 09:REUSE_ALV_GRID_DISPLAY 使用HTML 居中 颜色大小 加粗 斜体 超链接 控制
ALV  DMEO 10:REUSE_ALV_GRID_DISPLAY TOP_OF_PAGE 显示Logo图片
ALV  DMEO 11:REUSE_ALV_GRID_DISPLAY 复选框 刷新 grid_title

Debug 系列

DEBUG  系列一:Dump debug
DEBUG  系列二:Configure Debugger Layer
DEBUG系列三:使用  F9 和 watch point
DEBUG系列四:第三方接口debug
DEBUG系列五:Update  模式下的function debug
DEBUG系列六:后台JOB  debug
DEBUG系列七:保存测试参数
DEBUG系列八:Debug弹出框
debug系列九:SM13查看update更新报错
DEBUG系列十:Smartforms  debug
DEBUG系列十一:GGB1  debug
Debug系列十二:QRFC  队列 debug










  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP是一种SAP开发语言,其在企业级应用的开发和运行中发挥着不可替代的作用。在实际的开发和业务流程中,数据的加密与保护是非常重要的,因此在ABAP的开发中,MD5Base64算法的应用也变得越来越广泛。 MD5是一种常见的加密算法,可以将任意长度的消息摘要成固定长度的128位数据,具有不可逆转的特点,因此对于数据的保护有着非常好的效果。在ABAP中,可以通过使用Function module “SSFC_STRING_HASH”实现MD5加密,具体操作如下: 1.需要使用IMPORT参数algorithm(值为’MD5’) 2.调用函数时,需要将需要加密的消息传递给EXPORT变量“hashval”,这个变量的类型是RAW,或者是CHAR,长度为16。 示例代码如下: DATA: lv_text TYPE string VALUE 'ABAP MD5加密', lv_algo TYPE ssfc_apps_algo_md5, lv_hash TYPE ssfc_raw16. lv_algo = 'MD5'. CALL FUNCTION 'SSFC_STRING_HASH' EXPORTING algorithm = lv_algo string = lv_text IMPORTING hashval = lv_hash. 在得到MD5值之后,可以将其与Base64加密算法结合使用,对数据进行进一步保护和传输。Base64编码可以将二进制数据转化成一种可读性很高的ASCII字符组合,具有不可逆的特征,因此在传输数据中的广泛应用非常必要。 在ABAP中,可以通过使用Function module “SCMS_BASE64_ENCODE_STR”的方法实现Base64编码,将加密后的数据转换成可读性更高的字符创类型数据传输出去,具体操作如下: 示例代码如下: DATA: lv_base64 TYPE string. CALL FUNCTION 'SCMS_BASE64_ENCODE_STR' EXPORTING text = lv_hash IMPORTING b64 = lv_base64. 可以看到,在ABAP的开发中,MD5Base64加密算法的应用,可以更好地保护数据,保障企业的信息安全,在实际开发中具有非常重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值