与SAPUI5/Javascript不同的SHA256的ABAP字符串

2020-09-05 17:07发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

当前在我的SAPUI5项目中,我正在使用此代码行创建HMAC编码的字符串;

 var secretKey = CryptoJS.enc.Hex.parse('SECRETKEY'); //使用CRYPTOJS库!
 var hash = CryptoJS.HmacSHA256('abc',secretKey);
 hashInBase64 = CryptoJS.enc.Base64.stringify(hash); 

我正在使用CryptoJS库在UI5中执行此代码。

但是,问题是当我想在ABAP中执行相同的操作时,我收到了错误的HMAC编码字符串。 经过几次测试后,似乎在计算HMAC之前,编码(以abap方式)是错误的。

是否有一个执行'CryptoJS.enc.Hex.parse()'的功能模块-在谷歌搜索之后 它会做什么,将参数解释为已编码,然后将其转换为单词数组。

数据:
       lv_sign_key_x TYPE xstring,
       lv_hmac_result TYPE字符串。

 DATA(lv_binary_secret)= cl_abap_hmac => string_to_xstring('SECRETKEY')。

     cl_abap_hmac => calculate_hmac_for_char(
       出口
         if_algorithm ='SHA256'"哈希算法
         if_key = lv_binary_secret" HMAC密钥
         if_data ='abc'"数据
       输入
         ef_hmacb64string = lv_hmac_result" HMAC值作为base64编码的字符串
     )。

 

谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

当前在我的SAPUI5项目中,我正在使用此代码行创建HMAC编码的字符串;

 var secretKey = CryptoJS.enc.Hex.parse('SECRETKEY'); //使用CRYPTOJS库!
 var hash = CryptoJS.HmacSHA256('abc',secretKey);
 hashInBase64 = CryptoJS.enc.Base64.stringify(hash); 

我正在使用CryptoJS库在UI5中执行此代码。

但是,问题是当我想在ABAP中执行相同的操作时,我收到了错误的HMAC编码字符串。 经过几次测试后,似乎在计算HMAC之前,编码(以abap方式)是错误的。

是否有一个执行'CryptoJS.enc.Hex.parse()'的功能模块-在谷歌搜索之后 它会做什么,将参数解释为已编码,然后将其转换为单词数组。

数据:
       lv_sign_key_x TYPE xstring,
       lv_hmac_result TYPE字符串。

 DATA(lv_binary_secret)= cl_abap_hmac => string_to_xstring('SECRETKEY')。

     cl_abap_hmac => calculate_hmac_for_char(
       出口
         if_algorithm ='SHA256'"哈希算法
         if_key = lv_binary_secret" HMAC密钥
         if_data ='abc'"数据
       输入
         ef_hmacb64string = lv_hmac_result" HMAC值作为base64编码的字符串
     )。

 

谢谢。

付费偷看设置
发送
6条回答
zhangjiyang1323
1楼 · 2020-09-05 17:52.采纳回答

在这种情况下,您确定有关JS代码中的这一行吗?

 var secretKey = CryptoJS.enc.Hex.parse('SECRETKEY');//使用CRYPTOJS库!

方法CryptoJS.enc.Hex.parse解析已十六进制编码的字符串并将其转换为字符串。

因此,如果要从十六进制中提取字符串,则可以使用它,并且如果要从字符串中进行十六进制编码,则可以使用Hex.stringify。

 var words = CryptoJS.enc.Hex.parse(" 48656c6c6f2c20576f726c6421");
 var hex = CryptoJS.enc.Hex.stringify(words); 

所以我有点困惑。

此代码返回的值是什么? 我认为是空的。

 var secretKey = CryptoJS.enc.Hex.parse('SECRETKEY');//使用CRYPTOJS库!

检查CryptoJS文档:

https://cryptojs.gitbook.io/docs/

Viktor

暮风yp
2楼-- · 2020-09-05 17:54

按预期工作。 非常感谢Viktor。

Nir深蓝
3楼-- · 2020-09-05 18:09

嗨,Sunil,

如果字符串已经进行了十六进制编码,则可以直接进行转换:

 DATA lv_binary_secret TYPE xstring。
 数据lv_input TYPE字符串VALUE'EFBBBF'。
 
 "仅大写,必要时转换为大写
 lv_binary_secret = lv_input。
昵称总是被占用
4楼-- · 2020-09-05 18:03

我只需要知道如何进行十六进制编码。 -谢谢。

追夢秋陽
5楼-- · 2020-09-05 17:45

您也可以在ABAP中编写JavaScript代码。 您尝试过吗?

6楼-- · 2020-09-05 18:07

在ABAP中使用Javascript已被弃用,因为现在已有许多版本发布(另请参见 https://help.sap.com/viewer/fe1d31bb6c551014b75bc66f0328fefe/7.02.19/en-US/808676416e805958e10000000a1550b0.html

一周热门 更多>