【问题标题】:ABAP string to SHA256 different to SAPUI5/JavascriptSHA256 的 ABAP 字符串与 SAPUI5/Javascript 不同
【发布时间】: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


【解决方案1】:

显示编码为十六进制并计算为 HMAC256 的确切方法。 Link

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`

【讨论】:

  • provide context for links,即解释问题的原因,代码是如何解决的。此外,您的答案令人困惑,因为 LV_STRING 包含 Hello: World! 的 UTF-8 编码的十六进制表示,而您有 SECRETKEY (我想它应该是 '5345435245544B4559' 以匹配您的问题) .
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多