gpt4 book ai didi

c# - 在流上加盐 C# MD5 ComputeHash

转载 作者:行者123 更新时间:2023-11-30 13:21:24 25 4
gpt4 key购买 nike

我看不出有什么方法可以对 MD5.ComputeHash(Stream) 加盐。我是否缺少将字节注入(inject) HashAlgorithm 的某种方法?

我尝试在执行流计算之前执行 ComputeHash(byte[]),但不出所料,它没有任何效果。有什么想法(除了修改文件)吗?

感谢您的宝贵时间。

附录更具体一点,我想使用流来获取我不想加载到内存中的大文件的哈希值。

FileInfo myFI= new FileInfo("bigfile.dat");
FileStream myIFS = piFile.OpenRead();
MD5 md5 = MD5.Create();
byte[] hash = md5.ComputeHash ( myIFS );
myIFS.Close ();

最佳答案

我认为缺乏示例的答案是:您真的不需要加盐。

像 MD5 这样的散列算法将任意长度的字节表转换为已知长度的字节表——该操作不容易逆向,输入表的微小变化会导致输出表发生不可预测的变化:

输入 => MD5 => 输出

加盐的目的是防止用户已经预先计算哈希结果表 (rainbow tables) 的攻击。通过在输入中引入微小的变化,结果会发生巨大变化,因此即使攻击者知道哈希结果和盐值,也很难猜出输入:

输入 + 盐 => MD5 => 输出

散列文件的原因是计算校验和。例如。您在网页上发布一个文件以及哈希结果。然后用户下载一个文件,通过 MD5 运行它并将结果与​​您发布的结果进行比较。很难篡改文件,因为每次操作都会更改生成的哈希值。

这里不需要加盐,因为您必须将盐与生成的散列一起发布,以便用户可以重复散列操作。

如果你真的需要引入加盐,只需以可重复的方式改变输入流,例如每个字节加一(有溢出)。

关于c# - 在流上加盐 C# MD5 ComputeHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com