在 Javascript 中创建 C# 生成的 HMAC 哈希
Create C# generated HMAC hash in Javascript
我下面有C#函数;
private string GetEncyptionData(string encryptionKey)
{
string hashString = string.Format("{{timestamp:{0},client_id:{1}}}", Timestamp, ClientId);
HMAC hmac = HMAC.Create();
hmac.Key = Guid.Parse(encryptionKey).ToByteArray();
byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(hashString));
string encData = Convert.ToBase64String(hash);
return encData;
}
我正在尝试在 Javascript 中转换此代码。我发现 this 图书馆作为帮手。
这是我正在使用的代码;
<script>
var timestamp = 1424890904;
var client_id = "496ADAA8-36D0-4B65-A9EF-EE4E3659910D";
var EncryptionKey = "E69B1B7D-8DFD-4DEA-824A-8D43B42BECC5";
var message = "{timestamp:{0},client_id:{1}}".replace("{0}", timestamp).replace("{1}", client_id);
var hash = CryptoJS.HmacSHA1(message, EncryptionKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
alert(hashInBase64);
</script>
但上面的代码并未从 C# 代码生成相同的输出。
如何在 Javascript 中实现?
您的问题是由您的密钥引起的。在 C# 中,您传入一个 16 字节的数组作为键。在 CryptoJS 中,您传入一个字符串,CryptoJS 将其解释为密码,因此它将生成一个完全不同的密钥。
编辑:这是在javascript中获取正确密钥的方法:
如果您将 16 字节密钥转换为 Base64,在 javascript 中您可以执行以下操作。它将生成一个 WordArray 作为键,并使用该键生成您的哈希。
var keyBase64 = "eFY0EiMBZ0UBI0VniRI0Vg==";
var key = CryptoJS.enc.Base64.parse(keyBase64);
var hash = CryptoJS.HmacSHA1("Hello", key);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
console.log(hashInBase64);
我下面有C#函数;
private string GetEncyptionData(string encryptionKey)
{
string hashString = string.Format("{{timestamp:{0},client_id:{1}}}", Timestamp, ClientId);
HMAC hmac = HMAC.Create();
hmac.Key = Guid.Parse(encryptionKey).ToByteArray();
byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(hashString));
string encData = Convert.ToBase64String(hash);
return encData;
}
我正在尝试在 Javascript 中转换此代码。我发现 this 图书馆作为帮手。
这是我正在使用的代码;
<script>
var timestamp = 1424890904;
var client_id = "496ADAA8-36D0-4B65-A9EF-EE4E3659910D";
var EncryptionKey = "E69B1B7D-8DFD-4DEA-824A-8D43B42BECC5";
var message = "{timestamp:{0},client_id:{1}}".replace("{0}", timestamp).replace("{1}", client_id);
var hash = CryptoJS.HmacSHA1(message, EncryptionKey);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
alert(hashInBase64);
</script>
但上面的代码并未从 C# 代码生成相同的输出。 如何在 Javascript 中实现?
您的问题是由您的密钥引起的。在 C# 中,您传入一个 16 字节的数组作为键。在 CryptoJS 中,您传入一个字符串,CryptoJS 将其解释为密码,因此它将生成一个完全不同的密钥。
编辑:这是在javascript中获取正确密钥的方法:
如果您将 16 字节密钥转换为 Base64,在 javascript 中您可以执行以下操作。它将生成一个 WordArray 作为键,并使用该键生成您的哈希。
var keyBase64 = "eFY0EiMBZ0UBI0VniRI0Vg==";
var key = CryptoJS.enc.Base64.parse(keyBase64);
var hash = CryptoJS.HmacSHA1("Hello", key);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
console.log(hashInBase64);