等价于 C# 上的 CryptoJS.enc.Base64.parse
Equivalent of CryptoJS.enc.Base64.parse on C#
我有一个使用 CryptoJS 生成散列的 javascript 后端,我需要在 C# 客户端上生成相同的散列,但无法重现与 javascript.[=14 相同的结果=]
后端代码是这样的:
function generateHash (str, cypherkey) {
return CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(str, CryptoJS.enc.Base64.parse(cypherkey)))
}
console.log(generateHash("testString", "UTI5dVozSmhkSE1zSUhsdmRTZDJaU0JtYjNWdVpDQnBkQ0VnUVhKbElIbHZkU0J5WldGa2VTQjBieUJxYjJsdUlIVnpQeUJxYjJKelFIZGhiR3hoY0c5d0xtTnZiUT09"))
并打印:“FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4="
然后,当我尝试使用以下代码在我的 C# 客户端上执行相同操作时:
public static string generateHash(string str, string cypherkey)
{
var keyenc = new System.Text.ASCIIEncoding();
byte[] keyBytes = keyenc.GetBytes(cypherkey);
var key = BitConverter.ToString(keyBytes);
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(key);
byte[] messageBytes = encoding.GetBytes(str);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
return Convert.ToBase64String(hashmessage);
}
}
打印其他结果:“SiEjJASvYWfO5y+EiSJAqamMcUyBSTDl5Sy1zXl1J/k="
问题出在将cypherkey转base64的过程中,可能是错误的。
谁知道怎么解决这个问题?
问候和非常感谢^^
我还没有看到CryptoJs
的来源所以这里有一些假设(来自方法名称,编码等):
public static string generateHash(string str, string cypherkey)
{
// based on CryptoJS.enc.Base64.parse
byte[] keyBytes = System.Convert.FromBase64String(cypherkey);
using (var hmacsha256 = new HMACSHA256(keyBytes))
{
byte[] hashmessage = hmacsha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
return Convert.ToBase64String(hashmessage);
}
}
FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4=
Hth
我有一个使用 CryptoJS 生成散列的 javascript 后端,我需要在 C# 客户端上生成相同的散列,但无法重现与 javascript.[=14 相同的结果=]
后端代码是这样的:
function generateHash (str, cypherkey) {
return CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(str, CryptoJS.enc.Base64.parse(cypherkey)))
}
console.log(generateHash("testString", "UTI5dVozSmhkSE1zSUhsdmRTZDJaU0JtYjNWdVpDQnBkQ0VnUVhKbElIbHZkU0J5WldGa2VTQjBieUJxYjJsdUlIVnpQeUJxYjJKelFIZGhiR3hoY0c5d0xtTnZiUT09"))
并打印:“FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4="
然后,当我尝试使用以下代码在我的 C# 客户端上执行相同操作时:
public static string generateHash(string str, string cypherkey)
{
var keyenc = new System.Text.ASCIIEncoding();
byte[] keyBytes = keyenc.GetBytes(cypherkey);
var key = BitConverter.ToString(keyBytes);
var encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(key);
byte[] messageBytes = encoding.GetBytes(str);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
return Convert.ToBase64String(hashmessage);
}
}
打印其他结果:“SiEjJASvYWfO5y+EiSJAqamMcUyBSTDl5Sy1zXl1J/k="
问题出在将cypherkey转base64的过程中,可能是错误的。
谁知道怎么解决这个问题?
问候和非常感谢^^
我还没有看到CryptoJs
的来源所以这里有一些假设(来自方法名称,编码等):
public static string generateHash(string str, string cypherkey)
{
// based on CryptoJS.enc.Base64.parse
byte[] keyBytes = System.Convert.FromBase64String(cypherkey);
using (var hmacsha256 = new HMACSHA256(keyBytes))
{
byte[] hashmessage = hmacsha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
return Convert.ToBase64String(hashmessage);
}
}
FwdJUHxt/xSeNxHQFiOhmPDRh73NFfuWK7LG6ssN9k4=
Hth