目前在我的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=
显示编码为十六进制并计算为HMAC256的确切方法。链接
data lv_binary_secret type xstring.
data lv_string type string value '48656c6c6f2c20576f726c6421'.
translate lv_string to upper case.
lv_binary_secret = lv_string.
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 = data(lv_hmac_result) "HMAC value as base64-encoded string
).`enter code here`