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

SHA256的ABAP字符串与SAPUI5/Javascript不同,javascript,abap,sha256,hmac,Javascript,Abap,Sha256,Hmac,目前在我的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); 它给出了ezdbnmwgoaneiozonkng2f

目前在我的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);
它给出了
ezdbnmwgoaneiozonkng2fgfzi7yy/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的精确方法


显示了编码为十六进制并计算为HMAC256的精确方法


Hi@SandraRossi JAVA中SECRETKEY的结果是words:Array(2)0:305419896 1:0,在SAP中,它显示的是十六进制值,即313233343536373839@SandraRossiJavascript*尝试为_raw执行hmac_,并给出了完全不同的字符串输出。您是否在base64中给出与上述代码对应的结果?我在ABAP中没有相同的结果:
9dyEZn5G+uiRwsNqgY5S6k9/gmchefnff4vfa5qbkkk1w=
@SandraRossi我也得到了相同的9dyEZn5G+uiRwsNqgY5S6k9/gmchefnff4vfa5qbk1w=但是它是错误的,因为javascript版本是ezdbnmwgoaneonaiozong2ffrar7yy/B8IQKXr3+krY=也在那里被问到并回答了。Hi@sandossi@SECRETKEY的结果是什么在JAVA中是words:Array(2)0:305419896,在SAP中是1:0,它显示的是十六进制值,即313233343536373839@SandraRossiJavascript*尝试为_raw执行hmac_,并给出了完全不同的字符串输出。您是否在base64中给出与上述代码对应的结果?我在ABAP中没有相同的结果:
9dyEZn5G+uiRwsNqgY5S6k9/gmchefnff4vfa5qbkkk1w=
@SandraRossi我也得到了相同的9dyEZn5G+uiRwsNqgY5S6k9/gmchefnff4vfa5qbk1w=但是它是错误的,因为javascript版本是ezdbnmwgoaneiozonkng2ffzi7yy/B8IQKXr3+krY=也被问进去并回答了。请,例如,解释问题的原因,代码如何解决问题。此外,您的答案令人困惑,因为
LV_STRING
包含
Hello:World!的UTF-8编码的十六进制表示形式当您有
SECRETKEY
(我想应该是'5345435245544B4559'来匹配您的问题)。请解释问题的原因,即代码如何解决问题。此外,您的答案令人困惑,因为
LV_STRING
包含
Hello:World!的UTF-8编码的十六进制表示形式而您有
SECRETKEY
(我想应该是'5345435245544B4559'来匹配您的问题)。
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`