Cryptography 计算时ComputeHash是否依赖于计算机密钥?

Cryptography 计算时ComputeHash是否依赖于计算机密钥?,cryptography,hash,Cryptography,Hash,我正试图弄清楚,如果机器键值不同,已经散列(使用下面的代码)的值是否会不同。另外,我想知道其他语言(如Java)的实现是否会产生不同的结果 string hashedPassword=Convert.ToBase64String( 新System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash( System.Text.Encoding.Default.GetBytes(密码)); (我试图在谷歌上找到答案,但我找不到

我正试图弄清楚,如果机器键值不同,已经散列(使用下面的代码)的值是否会不同。另外,我想知道其他语言(如Java)的实现是否会产生不同的结果

string hashedPassword=Convert.ToBase64String(
新System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(
System.Text.Encoding.Default.GetBytes(密码));

(我试图在谷歌上找到答案,但我找不到任何明确的答案。)

否。哈希算法不使用密钥,应该独立于实现。任何平台、任何机器钥匙都应获得相同的输出


顺便说一句,如果您这样做是为了存储密码,那么您应该在散列之前先对密码进行加密(通常预先挂起一些随机字节),以防止对数据库的字典攻击。

SHA1CryptoServiceProvider.ComputeHash()
将始终为相同的输入返回相同的结果(无论它在哪台机器上运行)。任何其他正确实现的SHA1算法也将给出相同的结果


<>但请注意,使用<代码> Stase.Text .Cord.Debug(GetBytes)(密码)<代码>来计算输入。这将不依赖于机器。您应该强烈地考虑使用<代码>编码。UTF8< /代码>代替。

谢谢您的回答。只有一件事,您在回答中应该说“应该是独立于实现的”。-会有什么不同?或者文本应该是“将独立于实施”?如果使用相同的代码,它将独立于实现。然而,.NET和Java的库在接口上有很大的不同,有时在移植代码时会出错。++在编码上-如果有许多不同的机器为单个数据库+1贡献值,这是一个非常常见的错误,也是一个真正的混乱r答案,
System.Text.Encoding.Default
是错误的,您的答案只是为我节省了调试问题的时间。