.NET框架附带6种不同的哈希算法:MD5:16个字节(散列时间500MB:1462毫秒)SHA-1:20个字节(1644毫秒)SHA256:32个字节(5618毫秒)SHA384:48个字节(3839毫秒)SHA512:64个字节(3820毫秒)RIPEMD:20个字节(7066 ms)这些功能中的每个功能都有不同。MD5是最快的,而RIPEMD是最慢的。MD5的优点是适合内置的Guid类型。它是类型3 UUID的基础。SHA-1哈希是类型5 UUID的基础。这使得它们非常易于识别。但是,MD5容易受到碰撞攻击,SHA-1也容易受到攻击,但是程度较小。在什么情况下应该使用哪种哈希算法?我真的很想知道答案的具体问题是:MD5不值得信赖吗?在正常情况下,当您使用没有恶意意图的MD5算法并且任何第三方都没有恶意意图时,您会期望发生任何冲突(这意味着两个任意byte []会产生相同的哈希)RIPEMD比SHA1好多少?(如果更好),其计算速度要慢5倍,但哈希大小与SHA1相同。在对文件名(或其他短字符串)进行哈希处理时,获得非恶意冲突的几率是多少?(例如,两个具有相同MD5哈希值的随机文件名)(带有MD5 / SHA1 / SHA2xx)通常,非恶意冲突的几率是多少?这是我使用的基准: static void TimeAction(string description, int iterations, Action func) { var watch = new Stopwatch(); watch.Start(); for (int i = 0; i < iterations; i++) { func(); } watch.Stop(); Console.Write(description); Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds); } static byte[] GetRandomBytes(int count) { var bytes = new byte[count]; (new Random()).NextBytes(bytes); return bytes; } static void Main(string[] args) { var md5 = new MD5CryptoServiceProvider(); var sha1 = new SHA1CryptoServiceProvider(); var sha256 = new SHA256CryptoServiceProvider(); var sha384 = new SHA384CryptoServiceProvider(); var sha512 = new SHA512CryptoServiceProvider(); var ripemd160 = new RIPEMD160Managed(); var source = GetRandomBytes(1000 * 1024); var algorithms = new Dictionary<string,HashAlgorithm>(); algorithms["md5"] = md5; algorithms["sha1"] = sha1; algorithms["sha256"] = sha256; algorithms["sha384"] = sha384; algorithms["sha512"] = sha512; algorithms["ripemd160"] = ripemd160; foreach (var pair in algorithms) { Console.WriteLine("Hash Length for {0} is {1}", pair.Key, pair.Value.ComputeHash(source).Length); }
4 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
时代变了,我们有SHA3赢家。我建议使用SHA3竞赛的keccak(又名SHA3)获胜者。
原始答案:
以最弱到最强的顺序,我会说:
RIPEMD BROKEN,不应该使用,因为在此pdf中可以看到
MD-5破碎,切勿使用,可在2分钟内用笔记本电脑破碎
SHA-1 损坏,原则上不要使用,原则上已被破坏,到本周攻击越来越好
SHA-2弱,在未来几年内可能会损坏。发现了一些弱点。请注意,通常,密钥大小越大,散列函数破解的难度就越大。虽然密钥大小=强度并不总是正确的,但大多数情况下都是正确的。因此SHA-256可能比SHA-512弱。
Skein不为人知的弱点,是SHA-3的候选人。它是相当新的,因此未经测试。它已经以多种语言实现。
MD6未知的弱点,是SHA-3的另一种候选方案。可能比Skien强,但在单核计算机上则慢。像Skien一样,未经测试。一些具有安全意识的开发人员正在以任务关键型角色使用它。
我个人会使用MD6,因为永远不会太偏执。如果真正关心速度,我会考虑使用Skein或SHA-256。
杨__羊羊
TA贡献1943条经验 获得超7个赞
在MD5的防御中,没有已知的方法来生成带有任意MD5哈希的文件。原作者必须事先计划好有工作上的冲突。因此,如果接收方信任发送方,则MD5可以。如果签名人是恶意的,则MD5会被破坏,但是它不容易受到中间人攻击。
- 4 回答
- 0 关注
- 614 浏览
添加回答
举报
0/150
提交
取消