Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# .net4上的SHA1代_C#_.net_Hash_Sha1 - Fatal编程技术网

C# .net4上的SHA1代

C# .net4上的SHA1代,c#,.net,hash,sha1,C#,.net,Hash,Sha1,我重用了一些旧代码,后来发现我一直在使用这些代码生成SHA1哈希 HashAlgorithm sha = new SHA1CryptoServiceProvider(); return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim())); 当我使用以下代码生成SHA1散列时,我的散列结果与使用测试时的散列结果不同,例如 哪一个是正确的 我在这里做错了什么吗?很可能是编码上的差异。您正在使用UTF-16。尝试使用U

我重用了一些旧代码,后来发现我一直在使用这些代码生成SHA1哈希

HashAlgorithm sha = new SHA1CryptoServiceProvider();
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim()));
当我使用以下代码生成SHA1散列时,我的散列结果与使用测试时的散列结果不同,例如

哪一个是正确的


我在这里做错了什么吗?

很可能是编码上的差异。您正在使用UTF-16。尝试使用UTF-8

刚刚确认该站点使用UTF-8。但是它们的代码对于某些字符是断开的,例如
,因为它们通过sql转义输入

但用普通SHA-1散列密码几乎从来都不是正确的选择。在大多数情况下,例如存储用于登录站点的密码,您应该使用适当的密码哈希函数,例如PBKDF2、bcrypt或带有适当salt的scrypt


PBKDF2在SHA-1盐析示例的.net中实现:

return Convert.ToBase64String(
    new HMACSHA1(
        Encoding.UTF8.GetBytes(salt))
    .ComputeHash(
        Encoding.UTF8.GetBytes(input)));

请确保“SHA-1的非种子单一应用程序几乎永远不会…”感谢您的输入!仅通过SSL运行时也是这样吗?@nj。SSL在这种情况下是不相关的,因为密码是散列存储在数据库中的,以防止数据库被盗。通过网络发送的密码不应散列,而应使用SSL进行保护。我的理解是,此功能设计为MAC。这反过来意味着它很快。您需要使用迭代方案来降低速度,这正是PBKDF2所做的。