MessageDigest的选择好多,包括MD2、MD4、MD5、SHA-1、SHA-256、RIPEMD128、RIPEMD160等等。我们如何选择呢?
选择考虑在两个方面:安全、速度。
MD2很安全,但是速度极慢,一般不用。
速度方面,最快的是MD4,MD5比SHA-1快
速度排名:MD4 > MD5 > RIPEMD-128 > SHA-1 > REPEMD-160
按照《应用密码学手册》提供的表格数据为:
MD4 长度 128 相对速度 1
MD5 长度 128 相对速度 0.68
REPEMD-128 长度 128 相对速度 0.39
SHA-1 长度 160 相对速度 0.29
REPEMD-160 长度 160 相对速度 0.24
我亲自测试的结果和《应用密码学手册》提供的数据接近。
MD4已经很早证明有缺陷,很少使用,最流行的是MD5和SHA-1,但MD5和SHA1也被王小云找到碰撞,证实不安全。
传说SHA-1比MD5要安全,但是SHA-1有美国国家安全局的背景,有人怀疑这个算法背后有不可告人的秘密,我也是阴谋论者之一,倾向选择MD5而不是SHA-1。王小云找到SHA-1碰撞之后,可以说传说的谣言破灭了,而且MD5速度要比SHA-1快差不多一倍,没有什么理由选择SHA-1。
----------------------------------
在Java的现实环境中是怎样?
在SUN的JCE实现中,只提供了MD2、MD5、SHA-1,SHA-256等常用的MessageDigest算法。
开源的JCE实现bouncycastle则提供了众多的实现,包括MD整个系列,SHA整个系列,RIPEMD整个系列。
很多的开源项目都带一个bcprov-jdk14.jar的包,可以说bouncycastle应用很广泛。SUN公司的一些项目也用了bouncycastle,例如JXTA。
但实际上,SUN的实现包括了MD4,但你需要这样使用:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->MessageDigest md = sun.security.provider.MD4.getInstance();
但是,JDK带实现性能要比bouncycastle性能好得多,相差速度通常超过一倍以上,我测试过MD5、SHA1和MD4,其性能差别都是类似,一倍多。
比较的结论:
bouncycastle开源免费,提供算法多,但速度较慢
SUN JCE提供的实现,包括了流行常用算法,速度很快,同类型算法比bouncycastle要快一倍以上。
----------------------------------
结论:
又要安全又要速度,选择MD5
追求安全,不在意速度,相信传说,不相信阴谋论,选择SHA系列
追求速度,安全次之,可以选择MD4。
----------------------------------
现实例子:
emule采用MD4和SHA-1两种结合使用
apache之类的技术网站,提供下载的文件,同时提供一个校验文件.md5
相关推荐
在Java中,`java.security.MessageDigest`类提供了对多种消息摘要算法的支持,包括MD5。以下是对给定代码片段的详细解析: ```java import java.security.MessageDigest; import java.util.List; public class ...
在Java中实现SHA-256加密算法,可以使用内置的`java.security.MessageDigest`类。这个过程涉及到几个关键步骤,包括创建`MessageDigest`实例、更新输入数据和获取哈希值。 首先,我们需要导入必要的Java库: ```...
* 灵活性强:MessageDigest类支持多种信息摘要算法,可以根据需要选择合适的算法。 * 易于使用:使用MessageDigest类非常简单,只需要获取MessageDigest对象,执行加密操作,并将结果转换为十六进制字符串。 ...
1. 哈希算法的速度问题:在讨论哈希算法的速度问题时,需要考虑到哈希函数的选择和实现方式。在大多数情况下,哈希函数的速度不会产生明显的变化,但是选择一个足够安全的哈希函数是非常重要的。 2. 字符串哈希函数...
1. **获取 `MessageDigest` 实例**:通过调用 `MessageDigest` 类的静态方法 `getInstance` 来获取 `MessageDigest` 对象,需要传入指定的哈希算法名称,如 `"SHA-256"`。 2. **提供输入数据**:将待哈希的数据作为...
在Java中,`java.security.MessageDigest` 类提供了对包括MD5在内的多种摘要算法的支持。 `MessageDigest` 类的使用方法如下: 1. 首先,需要通过 `getInstance` 方法获取一个特定算法的 `MessageDigest` 实例。在...
在IT行业中,加密和解密技术是保护数据安全的关键手段,尤其在网络安全和信息安全领域扮演着重要角色。...在实际开发中,应根据需求选择合适的算法,并注意遵循最佳实践,确保系统的安全性和可靠性。
在计算机科学中,哈希(Hash)算法是一种用于将任意长度...在实际应用中,选择合适的哈希算法取决于具体需求,如速度、安全性、哈希冲突概率等。理解并熟练使用这些哈希算法对于任何Java开发者来说都是非常重要的技能。
`getInstance`方法是`MessageDigest`类的一个静态方法,它是获取特定加密算法实现的入口点。 `MessageDigest.getInstance(String algorithm)`方法接受一个字符串参数,这个字符串指定了所需的加密算法。例如,常见...
4. 使用`MessageDigest`类时,务必记得更新实例,避免复用导致的安全问题。 5. 对于密码存储,通常会先用盐值(salt)和哈希函数多次迭代,以增加破解难度。 总结,SHA系列加密算法在Java编程中具有重要地位,它们...
- 在实际应用中,应结合业务需求选择合适的哈希算法和实现方式,同时注意异常处理,确保程序的健壮性和安全性。 总结来说,Java中实现MD5算法相对简单,但需要理解其背后的原理和应用场景。通过上述内容的学习,...
这是一个实现消息摘要算法 MD5 的 C++ 类。该算法的目的是计算给定位串的哈希值。MD5 产生一个 16 字节(128 位)的散列。 MD5 哈希已被证明在加密上容易受到各种攻击(谷歌它们),因此不应用于安全目的。该库的...
在Android平台上,安全性和数据保护是至关重要的,尤其是在处理用户敏感信息时。本文将深入探讨两种常见的加密算法:Base64和...在实际项目中,应根据具体需求选择合适的加密算法,并注意及时更新以应对新的安全威胁。
Java签名算法是用于确保数据完整性和来源可信性的关键安全机制,尤其在分布式系统、网络通信以及数字证书中广泛应用。...在实际开发中,根据具体的安全需求,可以选择更安全的哈希算法和密钥长度,以确保系统的安全性。
在 Java 中,我们可以使用 MessageDigest 类来实现哈希算法。MessageDigest 类提供了多种哈希函数,例如 SHA-256、SHA-512 等。这些哈希函数可以根据需要选择,以便满足不同的需求。 此外,我们还需要考虑 URL 编码...
开发者需要创建一个`java.security.MessageDigest`实现类,并通过`Provider`注册到系统中,使得用户可以通过标准接口使用SM3算法。 6. **性能优化**:在Java中实现SM3时,可能需要关注性能优化,如使用位操作而非...
在IT领域,加密技术是确保数据安全...开发者应根据具体需求选择合适的加密方案,同时关注算法的安全性,避免使用已知存在漏洞的加密方式。在Java编程中,合理的运用这些加密算法,可以有效提升应用程序的安全防护能力。
GUI界面使得用户可以直接输入字符串或选择文件进行SHA-1哈希计算,并且可能有伪进度条来模拟计算过程,以及显示运行时间以帮助理解算法性能。这样的设计对于教学和课程设计来说非常实用,因为它们直观地展示了算法的...
public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte b[] = md.digest();