Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#等价于解析cryptojs_C#_Cryptojs - Fatal编程技术网

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。 谢谢如果我确实了解您

我正在尝试创建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。
谢谢

如果我确实了解您在这里要找的是哪一件,我不是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#以同样的方式运行。