• 关于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,但你需要这样使用:
    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

  • 相关阅读:
    js获得动态生成的标签
    自定义字段在List和ClassList等标签里的使用方法
    asp.net dropdownlist 取不到值
    MXCMS新增标签IFrame 包含标签
    JS打印
    Flash图表解决方案 Finger Chart
    推荐个免费的客户端控件
    C#利用反射获取对象属性值
    位置导航MXCMS Position标签说明
    OAuth简介
  • 原文地址:https://www.cnblogs.com/jobs/p/713407.html
Copyright © 2020-2023  润新知