【发布时间】:2019-07-17 23:06:22
【问题描述】:
目前在我的 SAPUI5 项目中,我正在使用这行代码创建一个 HMAC 编码的字符串:
var secretKey = CryptoJS.enc.Hex.parse('SECRETKEY'); //USING THE CRYPTOJS LIBRARY!
var hash = CryptoJS.HmacSHA256('abc', secretKey);
hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
这给了eZdbNMwgWKOANEiozokNG2FGfzI7Yy/B8IQKXr3+krY=
我正在使用 CryptoJS 库在 UI5 中执行此代码。
但是,当我想在 ABAP 中执行相同操作时,我收到了错误的 HMAC 编码字符串。经过几次测试,在计算HMAC之前似乎编码(在abap中)是错误的。
是否有执行“CryptoJS.enc.Hex.parse()”的功能模块 - 在谷歌搜索它的功能后,它将参数解释为编码并将其转换为单词数组:
DATA:
lv_sign_key_x TYPE xstring,
lv_hmac_result TYPE string.
DATA(lv_binary_secret) = cl_abap_hmac=>string_to_xstring('SECRETKEY').
cl_abap_hmac=>calculate_hmac_for_char(
EXPORTING
if_algorithm = 'SHA256' "Hash Algorithm
if_key = lv_binary_secret "HMAC Key
if_data = 'abc' "Data
IMPORTING
ef_hmacb64string = lv_hmac_result "HMAC value as base64-encoded string
).
这给了9dyEZn5G+uiRwsNqgY5S6k9/gmCheFNF4vFa5qBKK1w=
【问题讨论】:
-
嗨@SandraRossi,JAVA 中 SECRETKEY 的结果是单词:Array(2) 0: 305419896 1:0 在 SAP 中,它显示它的十六进制值是 313233343536373839
-
@SandraRossi Javascript* 尝试做 hmac_for_raw 并给出了完全不同的字符串输出。
-
你给出的结果是base64对应上面的代码吗?我在 ABAP 中没有相同的结果:
9dyEZn5G+uiRwsNqgY5S6k9/gmCheFNF4vFa5qBKK1w= -
@SandraRossi 我也得到相同的 9dyEZn5G+uiRwsNqgY5S6k9/gmCheFNF4vFa5qBKK1w= 但是这是错误的,因为 javascript 版本是 eZdbNMwgWKOANEiozokNG2FGfzI7Yy/B8IQKXr3+krY=
-
也在SCN 中询问并在那里回答了。
标签: javascript abap sha256 hmac