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
补充:综合编程 , 安全编程 ,