哈希有什么问题?

Ass*_*sil -4 c# cryptography

我已经创建了这个单元测试以注意到一个奇怪的行为,你能帮助解决这里发生的事情吗?请注意第二个数组还有一个元素.

 [Fact]
        public void Should_Have_Different_Values()
        {
            byte[] saltedPasswordBytes = new byte[]{5,18,99,52,68,25,32 };
            string hashedPassword1, hashedPassword2;
            using (var sha256 = SHA256.Create())
            {
                hashedPassword1= sha256.ComputeHash(saltedPasswordBytes, 0, 3).ToBase64String();
            }

        saltedPasswordBytes = new byte[] { 5, 18, 99, 52, 68, 25, 32 ,50};
        using (var sha256 = SHA256.Create())
        {
            hashedPassword2 = sha256.ComputeHash(saltedPasswordBytes, 0, 3).ToBase64String();
        }
        Assert.NotEqual(hashedPassword1, hashedPassword2);
    }
Run Code Online (Sandbox Code Playgroud)

我不确定我在哪里弄错了但是我使用它来散列我的数据并且它似乎返回相同的值而不管盐.我在做什么问题?或哈希没有实现或什么?因为Rfc2898DeriveBytes运行良好.

use*_*740 6

不,SHA256实现(在.NET Core/.NET/Mono中)不是'brocken'.假设数百万人依赖的图书馆被破坏并且在提出问题时最好避免使用这种点击诱饵标题或"断言",通常不能有效利用时间.

问题是你的代码坏了.

请参阅HashAlgorithm.ComputeHash的文档:

计算指定字节数组的指定区域的哈希值.

在这种情况下,ComputeHash(dontCare, 0, 3)只计算数据前3个字节的哈希值.在示例代码中,两个"盐"的前三个字节是相同的.因此预期结果是相同的.

而且,所示数据不代表"盐".在实现密码/安全性之前刷新一点可能会很好.优选地,应该使用现有/测试的库.