`
teamojiao
  • 浏览: 344686 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于MessageDigest算法选择的问题

阅读更多

关于MessageDigest算法选择的问题


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 MessageDigest 的 getInstance 方法:简介、详解、实例代码和运行结果

    在本文中,我们介绍了 Java 中的 MessageDigest 类的 getInstance 方法。它是一个用于获取 MessageDigest 对象...当然,Java 提供了多种其他加密算法供选择,开发者可以根据实际需求选择合适的算法来保障数据的安全性。

    Java MessageDigest:安全哈希函数及用法解析与示例

    本文中,我们简要介绍了Java MessageDigest类,并提供了一个使用SHA-256算法计算哈希值的完整实例和代码。MessageDigest类为我们提供了一种安全的方式来生成消息摘要,用于验证数据的完整性和比较数据的唯一性。虽然...

    java自带的MessageDigest实现文本的md5加密算法

    主要介绍了java自带的MessageDigest实现文本的md5加密算法,需要的朋友可以参考下

    Message Digest 5算法 的C ++ 实现_代码_下载

    这是一个实现消息摘要算法 MD5 的 C++ 类。该算法的目的是计算给定位串的哈希值。MD5 产生一个 16 字节(128 位)的散列。 MD5 哈希已被证明在加密上容易受到各种攻击(谷歌它们),因此不应用于安全目的。该库的...

    Java中的MessageDigest类及digest()方法详解与示例

    在实际应用中,我们应该根据具体的需求和安全要求选择合适的哈希算法。 通过本文,您应该对Java中MessageDigest的digest()方法有了更深入的了解。希望这篇文章能够帮助您更好地理解和应用哈希函数的概念和方法。

    javaMessageDigest md5算法详细实现

    public static String md5(String str) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte b[] = md.digest();

    javascript MD5算法实现

    javascript md5摘要算法的实现

    SHA-256 java加密代码

    ava.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。关于信息摘要...

    Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包

    支持 SM3 的 MessageDigest 接口、SM3withSM2 混合算法 支持 SM4 的 Cipher、KeyFactory、KeyGenerator、SecretKey 接口、相关算法 CMAC-SM4、Poly1305-SM4 增加 java.security.PublicKey 的子类 SM2PublicKey 增加...

    Java 2平台安全技术-结构,API设计和实现

    7.3.3 java.security.MessageDigest 122 7.3.4 java.security.Signature 123 7.3.5 算法参数 124 7.3.6 java.security.Key和java.security. spec.KeySpec 126 7.3.7 java.security.KeyFactory和java. security....

    Java加密和数字签名编程快速入门

    可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作...

    md5中使用MD5加密算法进行加密

    md5 的算法 import java.security.*; import java.security.spec.*; class MD5_Test{ public final static String MD5(String s){ char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', '...

    Java中常用的加密算法

    Java中常用的加密算法主要有MD5,DES(对称加密),RSA(非对称加密),每一种加密算法有着各自的加密特点。(注意:本文为kotlin编码) ...其中,加密用到的类就是MessageDigest。 MD5 Demo加密如下: object MessageDige

    MD5的算法和使用

    java实现MD5算法 关键词: java MD5 import java.security.*; import java.util.*; /** * */ public class MD5 { private String inStr; private MessageDigest md5; /** * Constructs the MD5 object and ...

    MD5加密的算法详解

    MD5的加密算法详解,针对16位加密char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; try { byte[] btInput = s.getBytes(); MessageDigest ...

    Android编程之MD5加密算法实例分析

    Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包。实际上与J2SE平台一模一样。 算法签名: 代码如下:String getMD5(String val) throws NoSuchAlgorithmException ...

    jdk-8u241-windows-i586 (1).exe

    MessageDigest 类提供信息摘要算法的功能,他是抽象类,需要MessageDigest.getInstance才能拿到MessageDigest的对象。以MD5为例下面是我碰到的问题以及解决方式 ##注意点1.拿到对象 他是抽象类,需要 ...

    DES加密算法DES加密算法

    MessageDigest md = MessageDigest.getInstance("MD5"); A = md.digest(s.getBytes()); } catch (Exception e) { System.err.println("Digest failed" + e); } return A; } // returns new hex ...

    [S036] MD5算法.rar

    MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int ...

    android中Sha256加密算法

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Sha256 { public static String getSHA256(String str){ MessageDigest messageDigest; String encodestr = ...

Global site tag (gtag.js) - Google Analytics