【问题标题】:return hmac key in javascript在javascript中返回hmac键
【发布时间】:2018-06-22 09:28:53
【问题描述】:

从我的 api 提供者那里,我有一个可以生成 hmac 密钥的代码。

<html>
<head>
</head>
<body>
<p id="demo"></p>
<script>var BuckarooHmac = (function () {
    var self = {};

    function getEncodedContent(content) {
        if (content) {
            var md5 = CryptoJS.MD5(content);
            var base64 = CryptoJS.enc.Base64.stringify(md5);
            return base64;
        }

        return content;
    }

    function getHash(websiteKey, secretKey, httpMethod, nonce, timeStamp, requestUri, content) {
        var encodedContent = getEncodedContent(content);

        var rawData = websiteKey + httpMethod + requestUri + timeStamp + nonce + encodedContent;
        var hash = CryptoJS.HmacSHA256(rawData, secretKey);
        var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);

        return hashInBase64;
    }

    function getTimeStamp() {
        return Math.floor((new Date).getTime() / 1000);
    }

    function getNonce() {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        for (var i = 0; i < 16; i++) {
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        }
        return text;
    }

    self.GetAuthHeader = function (requestUri, websiteKey, secretKey, content, httpMethod) {
        var nonce = getNonce();
        var timeStamp = getTimeStamp();
        content = content ? content : "";
        var url = encodeURIComponent(requestUri).toLowerCase();
        return "hmac " + websiteKey + ":" + getHash(websiteKey, secretKey, httpMethod, nonce, timeStamp, url, content) + ":" + nonce + ":" + timeStamp;
    }
    return self;
     document.getElementById("demo").innerHTML = self.GetAuthHeader();
}());

</script>
</body>
</html>

我不习惯 javascript。我试图弄清楚如何在我的屏幕上打印生成的密钥。我试过这个:

document.getElementById("demo").innerHTML = self.GetAuthHeader();

我知道我一定做错了。我现在只需要朝着正确的方向前进。任何可以帮助我的人吗?

【问题讨论】:

  • 您有什么理由不在浏览器中使用内置的crypto.subtle?如果您已经了解基本概念,请联系 pretty straightforward 获得 hmac。
  • 你在哪里尝试那行代码?如果它在封闭的函数范围之外,则没有self 变量,但有BuckarooHmac.GetAuthHeader()
  • @BenjaminGruenbaum 我没有输入此代码。它已经创建。我只是想让结果显示出来。
  • @David 有一个自变量。我正在尝试在 return self 下的那行代码;
  • @Kevin:不要仅仅描述你尝试过的东西,而是在问题的代码中演示它。

标签: javascript hmac


【解决方案1】:

你试图在函数的 return 语句之后执行一个动作。该代码将永远无法到达,因为该函数已返回。

相反,先做:

document.getElementById("demo").innerHTML = self.GetAuthHeader();
return self;

或者,更好的是,如果此代码由供应商提供,那么您可能不应该编辑它。更新会删除您的编辑,并且供应商支持会受到影响。相反,完全在代码之外执行您的操作:

var BuckarooHmac = (function () {
    // vendor code
}());

document.getElementById("demo").innerHTML = BuckarooHmac.GetAuthHeader();

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2014-12-27
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多