【发布时间】: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