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



          溫少 2007-04-14 17:02 發表評論
          posted on 2007-04-14 17:02 溫少的日志 閱讀(498) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 龙门县| 奉新县| 九寨沟县| 孟连| 上虞市| 额敏县| 同江市| 滕州市| 石渠县| 延庆县| 买车| 临海市| 浮山县| 苏尼特左旗| 若羌县| 桃园市| 黄平县| 安陆市| 定兴县| 张掖市| 茌平县| 东乡县| 聂拉木县| 电白县| 景东| 东宁县| 洪江市| 临夏市| 东乌珠穆沁旗| 兰州市| 赤城县| 无锡市| 察隅县| 班玛县| 西和县| 卓尼县| 新竹县| 易门县| 泸州市| 米林县| 东莞市|