-2

有人可以帮我将以下 Fantom 代码转换为 Javascript 吗?

// compute salted hmac 
hmac := Buf().print("${username}:${userSalt}").hmac("SHA-1", password.toBuf).toBase64

// now compute login digest using nonce 
digest := "${hmac}:${nonce}".toBuf.toDigest("SHA-1").toBase64

我已经能够hmac使用CryptoJS计算变量:

var hash =  CryptoJS.HmacSHA1("alice:6s6Q5Rn0xZP0LPf89bNdv+65EmMUrTsey2fIhim/wKU=", "secret");

var hmac = hash.toString(CryptoJS.enc.Base64);

但我仍在为摘要而苦苦挣扎。

如果您发布示例,以下是我在测试中使用的变量:

username : "alice" 
password : "secret" 
userSalt : "6s6Q5Rn0xZP0LPf89bNdv+65EmMUrTsey2fIhim/wKU=" 
nonce    : "3da210bdb1163d0d41d3c516314cbd6e" 
hmac     : "z9NILqJ3QHSG5+GlDnXsV9txjgo=" 
digest   : "B2B3mIzE/+dqcqOJJ/ejSGXRKvE="
4

1 回答 1

1

这个答案使用CryptoJS,因为您已经取得了一些成功:

var username = "alice";
var password = "secret";
var userSalt = "6s6Q5Rn0xZP0LPf89bNdv+65EmMUrTsey2fIhim/wKU=";
var nonce    = "3da210bdb1163d0d41d3c516314cbd6e";

var hmac     = CryptoJS.HmacSHA1(username + ":" + userSalt, password).toString(CryptoJS.enc.Base64);
var digest   = CryptoJS.SHA1(hmac + ":" + nonce).toString(CryptoJS.enc.Base64);

console.log(hmac);   // --> z9NILqJ3QHSG5+GlDnXsV9txjgo=
console.log(digest); // --> B2B3mIzE/+dqcqOJJ/ejSGXRKvE=

请注意,它使用以下 CryptoJS 文件:

/rollups/sha1.js
/rollups/hmac-sha1.js
/components/enc-base64-min.js

你可以在这个 JS 粘贴箱中看到一个活生生的例子:

https://jsbin.com/luvinayoyi/edit?js,console

于 2016-03-04T18:44:10.107 回答