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

jos*_*ose 4 hash cryptography

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

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

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

Ras*_*ber 12

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

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

  • ++ on**编码** - 如果你对单个数据库有许多不同的机器贡献值,这是一个非常常见的错误和真正的混乱 (3认同)