【发布时间】:2015-02-26 04:46:37
【问题描述】:
我下面有 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 library 作为助手。
这是我正在使用的代码;
<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 中实现它?
【问题讨论】:
-
您是否 100% 确定加密密钥和时间戳是准确的?这就是过去经常让我感到困惑的原因......还要比较散列前后的值,以及在 base 64 转换之前和之后的值,看看差异可能在哪里。
标签: javascript c# sha hmacsha1