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

时间:2012-01-18 10:08:58

标签: cryptography hash

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

string hashedPassword = Convert.ToBase64String(
    new System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(
        System.Text.Encoding.Default.GetBytes(password)));

(我试图在Google上找到答案,但我找不到任何确定的答案。)

2 个答案:

答案 0 :(得分:10)

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

但请注意,您使用System.Text.Encoding.Default.GetBytes(password)来计算输入。这将独立于机器!您应该强烈考虑使用Encoding.UTF8

答案 1 :(得分:1)

不,不。哈希算法不使用密钥,应该与实现无关。任何平台,任何机器密钥,都应该得到相同的输出。

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