当前位置:编程学习 > JAVA >>

java加密解密研究9、其他消息摘要算法

除了MD、SHA、MAC这三大主流消息摘要算法外,还有许多我们不了解的消息摘要算法,包括RipeMD系列,Tiger,Whirlpool和GOST3411算法、

一、概述
RipeMD:
RipeMD(RACE Integrity Primitives Evaluation Message Digest),是由Hans Dobbertin等3人在对MD4,MD5缺陷分析的基础上,于1996年提出的。目前,RipeMD算法共有4个标准,主要是对摘要值长度的区分,类似于SHA系列算法,包含RipeMD128,RipeMD160、RipeMD256和RipeMD320共四种算法。HmacRipeMD128和HmacRipeMd160算法是RipeMD与MAC算法融合的产物

Tiger:
Tiger由Ross于1995年提出。Tiger号称是最快的Hash算法,专门为64位机器做了优化,其消息摘要长度为192位。

Whirlpool:
Whirlpool已被列入ISO标准,由于它使用了与AES加密标准相同的转化技术,极大的提高了安全性,被称为最安全的摘要算法。Whirlpool在历史上共有3个版本,目前最新的版本是2003年颁布的,通常将其称为Whirlpool3.0,其消息摘要长度为512位。

GOST3411:
GOST3411消息摘要长度为256位。

二、实现和应用
java6没有提供上述算法的实现,所以,这里主要介绍BouncyCastle的实现和应用
1、RipeMD系列算法
[java] view plaincopyprint?
1. package Test; 
2.  
3. import java.security.MessageDigest; 
4. import java.security.Security; 
5.  
6.  
7. import org.bouncycastle.jce.provider.BouncyCastleProvider; 
8. import org.bouncycastle.util.encoders.Hex; 
9. /**
10.  * RipeMD摘要算法工具类
11.  */ 
12. class RipeMDCoder { 
13.     /**
14.      * RipeMD128摘要算法
15.      */ 
16.     public static String encodeRipeMD128(byte[] data) throws Exception { 
17.         // 添加BouncyCastle的支持  
18.         Security.addProvider(new BouncyCastleProvider()); 
19.         // 初始化MessageDigest的信息  
20.         MessageDigest md = MessageDigest.getInstance("RipeMD128"); 
21.         byte[] digest = md.digest(data); 
22.         return new String(Hex.encode(digest)); 
23.     } 
24.      
25.     /**
26.      * RipeMD160摘要算法
27.      */ 
28.     public static String encodeRipeMD160(byte[] data) throws Exception { 
29.         // 添加BouncyCastle的支持  
30.         Security.addProvider(new BouncyCastleProvider()); 
31.         // 初始化MessageDigest的信息  
32.         MessageDigest md = MessageDigest.getInstance("RipeMD160"); 
33.         byte[] digest = md.digest(data); 
34.         return new String(Hex.encode(digest)); 
35.     } 
36.      
37.     /**
38.      * RipeMD256摘要算法
39.      */ 
40.     public static String encodeRipeMD256(byte[] data) throws Exception { 
41.         // 添加BouncyCastle的支持  
42.         Security.addProvider(new BouncyCastleProvider()); 
43.         // 初始化MessageDigest的信息  
44.         MessageDigest md = MessageDigest.getInstance("RipeMD256"); 
45.         byte[] digest = md.digest(data); 
46.         return new String(Hex.encode(digest)); 
47.     } 
48.      
49.      
50.     /**
51.      * RipeMD320摘要算法
52.      */ 
53.     public static String encodeRipeMD320(byte[] data) throws Exception { 
54.         // 添加BouncyCastle的支持  
55.         Security.addProvider(new BouncyCastleProvider()); 
56.         // 初始化MessageDigest的信息  
57.         MessageDigest md = MessageDigest.getInstance("RipeMD320"); 
58.         byte[] digest = md.digest(data); 
59.         return new String(Hex.encode(digest)); 
60.     } 
61. } 
62.  
63. public class RipeMDTest { 
64.     public static void main(String[] args) throws Exception { 
65.         String testString="12123123asd"; 
66.         System.out.println(RipeMDCoder.encodeRipeMD128(testString.getBytes())); 
67.         System.out.println(RipeMDCoder.encodeRipeMD160(testString.getBytes())); 
68.         System.out.println(RipeMDCoder.encodeRipeMD256(testString.getBytes())); 
69.         System.out.println(RipeMDCoder.encodeRipeMD320(testString.getBytes())); 
70.     } 
71. } 
 
2、HmacRipeMD算法
[java] view plaincopyprint?
1. package Test; 
2.  
3. import java.security.Security; 
4.  
5. import javax.crypto.KeyGenerator; 
6. import javax.crypto.Mac; 
7. import javax.crypto.SecretKey; 
8. import javax.crypto.spec.SecretKeySpec; 
9.  
10. import org.bouncycastle.jce.provider.BouncyCastleProvider; 
11. import org.bouncycastle.util.encoders.Hex; 
12.  
13. /**
14.  * HmacRipeMD摘要算法工具类
15.  */ 
16. class HmacRipeMDCoder { 
17.     /**
18.      * 初始化HmacRipeMD128摘要算法的密钥
19.      */ 
20.     public static byte[] initHmacRipeMD128Key() throws Exception { 
21.         // 添加BouncyCastle的支持  
22.         Security.addProvider(new BouncyCastleProvider()); 
23.         // 初始化KeyGenerator  
24.         KeyGenerator generator = KeyGenerator.getInstance("HmacRipeMD128"); 
25.         // 产生私密密钥  
26.         SecretKey secretKey = generato

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,