javascript - 如何在 google 闭包库上修复 sha256 hmac 的加密?

标签 javascript clojurescript sha256 hmac google-closure-library

多个 Hmac 加密器输出不同的 google 闭包库结果。

我已经尝试了多个 Hmac 加密器,它们都输出相同的结果。但是,当在 NodeJS 和 ClojureScript 中使用 google 闭包库时,它会输出完全不同的结果。

require("google-closure-library");

function bytesToHex(b) {
    var hexchars = '0123456789abcdef';
    var hexrep = new Array(b.length * 2);
    for (var i = 0; i < b.length; ++i) {
      hexrep[i * 2] = hexchars.charAt((b[i] >> 4) & 15);
      hexrep[i * 2 + 1] = hexchars.charAt(b[i] & 15);
    }
    return hexrep.join('');
}

goog.require('goog.crypt.Hmac');
goog.require('goog.crypt.Sha256');

function getHmac(key, message) {
    var hasher = new goog.crypt.Sha256();
    var hmacer = new goog.crypt.Hmac(hasher, key, 64);
    return bytesToHex(hmacer.getHmac(message));
}

console.log(getHmac('ac13', 'msg'));

key “ac13”和消息“msg”的 sha256 Hmac 已在多个加密库上被证明是 a4a21ba4ddef094c847d4a75ef9a026d329ee12563f3ab00e63261abae55c18d。

最佳答案

它工作得很好。 Hmac 需要 array of numbers ,不是字符串。

(defn hmac [key message]
    (let [decode goog.crypt/stringToByteArray
          hasher (goog.crypt.Sha256.)
          hmacer (goog.crypt.Hmac. hasher (decode key))]
        (.getHmac hmacer (decode message))))

(prn (goog.crypt/byteArrayToHex (hmac "ac13" "msg")))
=> "a4a21ba4ddef094c847d4a75ef9a026d329ee12563f3ab00e63261abae55c18d"

关于javascript - 如何在 google 闭包库上修复 sha256 hmac 的加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316829/

相关文章:

opengl - 如何为 GPGPU 扩展顶点着色器功能

javascript - 无法删除使用 JavaScript 添加的动态添加行

javascript - 从 postgres 函数运行 python 或 javascript 文件?

Clojure + Clojurescript : Macro to read code of current file

c++ - 如何使用 OpenSSL 的 SHA256 函数

python - 如何在Python上使用RSA私钥和SHA256解密

javascript 操作 json 对象

javascript - elevatezoom 上带有悬停选择器的图库图像

clojure - 在向量中关联多个元素的惯用方法

animation - 使用 Clojurescript Om 创建动画