C#等价于解析cryptojs
我正在尝试创建C#,它在CryptoJS中实现这一点C#等价于解析cryptojs,c#,cryptojs,C#,Cryptojs,我正在尝试创建C#,它在CryptoJS中实现这一点 var hash = CryptoJS.HmacSHA512(msg, key); var crypt = CryptoJS.enc.Utf8.parse(hash.toString()); var base64 = CryptoJS.enc.Base64.stringify(crypt); 我的问题是在第二个语句中,哈希变量被放入一个字符串中,然后被解析。 C#中是否有等价物?解析后,如何将结果编码为Utf8。 谢谢如果我确实了解您
var hash = CryptoJS.HmacSHA512(msg, key);
var crypt = CryptoJS.enc.Utf8.parse(hash.toString());
var base64 = CryptoJS.enc.Base64.stringify(crypt);
我的问题是在第二个语句中,哈希变量被放入一个字符串中,然后被解析。
C#中是否有等价物?解析后,如何将结果编码为Utf8。
谢谢如果我确实了解您在这里要找的是哪一件,我不是100%。但是在C#中没有UTF8 System.String这样的东西。但是,当您将字符串写入流时,可以选择流中字节的编码为UTF8 例如,将该编码作为选项传递给StreamWriter
using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8)) {
writer.Write(text);
}
我的老板找到了答案。不同之处在于,在使用C#返回base64字符串之前,必须将字节更改为十六进制
var encoder = new UTF8Encoding();
byte[] keyBytes = encoder.GetBytes(key);
var newlinemsg = action + "\n" + msg;
byte[] messageBytes = encoder.GetBytes(newlinemsg);
byte[] hashBytes = new HMACSHA512(keyBytes).ComputeHash(messageBytes);
var hexString = ToHexString(hashBytes);
var base64 = Convert.ToBase64String(encoder.GetBytes(hexString));
我强烈怀疑您真的想在哈希上调用
Convert.ToBase64String
。我怀疑使用UTF-8解析结果实际上在CryptoJS代码中被破坏了。。。散列的自然结果不是UTF-8编码的文本,它只是二进制数据。当前的脚本在postman中运行。但是,当我在C#中运行它时,它不会返回相同的结果。我恐怕不清楚这是什么意思。据我所知,Postman只是用来发出HTTP请求,而不是运行任何代码。请澄清问题,最好是用具体的样本数据,否则不太可能有人能帮助你。还有一种可能性是,您目前拥有的Javascript正在丢失信息,此时您应该修复这一点,而不是试图让C#以同样的方式运行。