SHA256的ABAP字符串与SAPUI5/Javascript不同
目前在我的SAPUI5项目中,我正在使用以下代码行创建HMAC编码字符串: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
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`