Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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# Vista和XP中的SHA1哈希不同_C#_.net 2.0_Hash_Sha1 - Fatal编程技术网

C# Vista和XP中的SHA1哈希不同

C# Vista和XP中的SHA1哈希不同,c#,.net-2.0,hash,sha1,C#,.net 2.0,Hash,Sha1,在使用C#.NET 2.0(在Vista上)的WinForm应用程序中,我使用SHA1哈希从字符串创建哈希,并将哈希存储在文本文件中(使用UTF-8编码)。我想使用存储在文本文件中的散列来解决一个问题。当我在Vista中运行项目时,它工作正常(即条件结果为true),但当我在XP中运行项目时,项目不会运行 Vista中创建哈希的方式与XP不同吗 代码摘录 byte[] HashValue; byte[] MessageBytes = Encoding.UTF8.GetBytes(strPlain

在使用C#.NET 2.0(在Vista上)的WinForm应用程序中,我使用SHA1哈希从字符串创建哈希,并将哈希存储在文本文件中(使用UTF-8编码)。我想使用存储在文本文件中的散列来解决一个问题。当我在Vista中运行项目时,它工作正常(即条件结果为true),但当我在XP中运行项目时,项目不会运行

Vista中创建哈希的方式与XP不同吗

代码摘录

byte[] HashValue;
byte[] MessageBytes = Encoding.UTF8.GetBytes(strPlain);
SHA1Managed SHhash = new SHA1Managed();
StringBuilder strHex = new StringBuilder("");
HashValue = SHhash.ComputeHash(MessageBytes);
foreach (byte b in HashValue)
{
    strHex.AppendFormat("{0:x2}", b);
}
// storing strHex in a text file with UTF-8 encoding
试验条件

string newHash = Program.GetHash("This will be hashed.");
// GetHash() does has the same code as above, but instead of storing hash in file in return
// hash.
bool validHash = newHash.Equals(oldHash);
// old has is the one stored in file
if (validHash)
{
    // some code
}
[编辑]

主要问题是相同的代码 在Vista中工作正常,但出现故障 在XP中。如果有逻辑的话 问题:它不应该在任何操作系统中工作


谢谢

我很好奇为什么您提到UTF-8编码与在文本文件中存储哈希值有关。您是在尝试存储原始数据字节(以某种方式转换为UTF-8),还是在存储哈希值的十六进制表示形式

通常,在文本文件中存储哈希值时,您会使用十六进制表示法,例如:

3e2f9d9069abd6ace2cb18f7390a06c034a0f9dd

没有必要专门使用UTF-8编码,因为上面的是普通的ASCII。

我很好奇,为什么您提到UTF-8编码与在文本文件中存储哈希值有关。您是在尝试存储原始数据字节(以某种方式转换为UTF-8),还是在存储哈希值的十六进制表示形式

通常,在文本文件中存储哈希值时,您会使用十六进制表示法,例如:

3e2f9d9069abd6ace2cb18f7390a06c034a0f9dd

没有必要专门使用UTF-8编码,因为上面的是普通的ASCII。

我怀疑文件中存储的旧哈希可能不正确。在每台机器上尝试一个简单的控制台应用程序片段。比如:

Console.WriteLine(Program.GetHash("This will be hashed."));
如果这些确实给出了相同的结果,那么这一定与比较例程有关(即,上面提到的oldHash)


还有一件事需要注意;我看到您正在使用bool validHash来存储比较结果,但随后检查布尔值validSource。这只是输入错误吗?

我怀疑文件中存储的旧哈希可能不正确。在每台机器上尝试一个简单的控制台应用程序片段。比如:

Console.WriteLine(Program.GetHash("This will be hashed."));
如果这些确实给出了相同的结果,那么这一定与比较例程有关(即,上面提到的oldHash)



还有一件事需要注意;我看到您正在使用bool validHash来存储比较结果,但随后检查布尔值validSource。这只是输入错误吗?

如何在机器之间传递二进制文件?有一次,当我在我的机器上准备ClickOnce包时,用7zip提供的最大压缩模式压缩二进制文件并在另一端用winzip解压二进制文件时,我遇到了一个哈希验证问题。

如何在机器之间传递二进制文件?有一次,当我在我的机器上准备ClickOnce包时,用7zip提供的最大压缩模式压缩二进制文件并在另一端用winzip解压时,我遇到了一个哈希验证问题。

你能发布你正在使用的代码吗?你也能发布实现“条件”的代码吗你在问题中提到了什么?另外,您是否检查了每个平台上相同的
strPlain
输入值的
MessageBytes
是否相同?谢谢。是,strPlain值相同。我使用了一个简单的句子“This will be hash.”RegardsI的意思是在调用输入值上的
Encoding.UTF8.GetBytes()
后检查
MessageBytes
值。我相信您已经在使用相同的
strPlain
输入值。如果它没有按照您的预期工作,那么您的预期是可疑的。检查一切!你可以发布你正在使用的代码吗?你也可以发布实现你在问题中提到的“条件”的代码吗?另外,您是否检查了每个平台上相同的
strPlain
输入值的
MessageBytes
是否相同?谢谢。是,strPlain值相同。我使用了一个简单的句子“This will be hash.”RegardsI的意思是在调用输入值上的
Encoding.UTF8.GetBytes()
后检查
MessageBytes
值。我相信您已经在使用相同的
strPlain
输入值。如果它没有按照您的预期工作,那么您的预期是可疑的。检查一切!谢谢我使用十六进制表示,如上所示。UTF-8是导致问题的原因吗?重新考虑不太可能是UTF-8导致了您的问题。你能把你用的代码贴出来吗?谢谢。我使用十六进制表示,如上所示。UTF-8是导致问题的原因吗?重新考虑不太可能是UTF-8导致了您的问题。你能发布你正在使用的代码吗?谢谢你指出validSource。我已经改正了。只是打字错误。雷加西
Console.WriteLine(Program.GetHash(“这将被散列”)在XP和Vista中给出不同的结果。不知道为什么,因为这两种情况下的代码是相同的。感谢您指出validSource。我已经改正了。只是打字错误。雷加西
Console.WriteLine(Program.GetHash(“这将被散列”)在XP和Vista中给出不同的结果。不知道为什么,因为这两种情况下的代码是相同的。