java加密解密之消息摘要算法md5shamacWord文档格式.docx
《java加密解密之消息摘要算法md5shamacWord文档格式.docx》由会员分享,可在线阅读,更多相关《java加密解密之消息摘要算法md5shamacWord文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
③一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;
但相同的输入必会产生相同的输出。
④消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,乃至根本就找不到任何与原信息相关的信息。
⑤好的摘要算法,无法找到两条消息,是它们的摘要相同。
现有的消息摘要算法
消息摘要算法包括MD、SHA和MAC三大系列,常常利用于验证数据的完整性,是数据签名算法的核心算法。
MAC与MD和SHA不同,MAC是含有密钥的散列函数算法,咱们也常把MAC称为HMAC。
JDK对消息摘要算法的支持
JDK6支持MD2/MD5/SHA/SHA256/SHA384/SHA512/HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512
利用到
十六进制工具类
见:
javabyte数组与十六进制字符串互转
MD和SHA系列的java实现:
Java代码
1.import
2.import
3./**
4.
*
reference
apache
commons
<
a
5.
href="
"
>
6.
7.
support
MD2/MD5/SHA/SHA256/SHA384/SHA512
8.
@author
Aub
9.
10.
*/
11.public
class
DigestUtils
{
12.
/**
13.
按照给定摘要算法创建一个消息摘要实例
14.
15.
@param
algorithm
16.
摘要算法名
17.
@return
消息摘要实例
18.
@see
MessageDigest#getInstance(String)
19.
@throws
RuntimeException
20.
当
{@link
发生时
21.
22.
static
MessageDigest
getDigest(String
algorithm)
23.
try
24.
return
(algorithm);
25.
}
catch
(NoSuchAlgorithmException
e)
26.
throw
new
RuntimeException());
27.
28.
29.
30.
获取
MD5
31.
32.
33.
34.
35.
36.
private
getMd5Digest()
37.
getDigest("
MD5"
);
38.
39.
40.
SHA-1
41.
42.
43.
44.
45.
46.
getShaDigest()
47.
SHA"
48.
49.
50.
SHA-256
51.
52.
53.
54.
55.
56.
getSha256Digest()
57.
SHA-256"
58.
59.
60.
SHA-384
61.
62.
63.
64.
65.
66.
getSha384Digest()
67.
SHA-384"
68.
69.
70.
SHA-512
71.
72.
73.
74.
75.
76.
getSha512Digest()
77.
SHA-512"
78.
79.
80.
利用MD5消息摘要算法计算消息摘要
81.
82.
data
83.
做消息摘要的数据
84.
消息摘要(长度为16的字节数组)
85.
86.
public
byte[]
encodeMD5(byte[]
data)
87.
getMd5Digest().digest(data);
88.
89.
90.
91.
92.
93.
94.
消息摘要(长度为32的十六进制字符串)
95.
96.
String
encodeMD5Hex(byte[]
97.
(encodeMD5(data));
98.
99.
100.
利用SHA-1消息摘要算法计算消息摘要
101.
102.
103.
104.
SHA-1消息摘要(长度为20的字节数组)
105.
106.
encodeSHA(byte[]
107.
getShaDigest().digest(data);
108.
109.
110.
111.
112.
113.
114.
SHA-1消息摘要(长度为40的十六进制字符串)
115.
116.
encodeSHAHex(byte[]
117.
(getShaDigest().digest(data));
118.
119.
120.
利用SHA-256消息摘要算法计算消息摘要
121.
122.
123.
124.
SHA-256消息摘要(长度为32的字节数组)
125.
126.
encodeSHA256(byte[]
127.
getSha256Digest().digest(data);
128.
129.
130.
131.
132.
133.
134.
SHA-256消息摘要(长度为64的十六进制字符串)
135.
136.
encodeSHA256Hex(byte[]
137.
(encodeSHA256(data));
138.
139.
140.
利用SHA-384消息摘要算法计算消息摘要
141.
142.
143.
144.
SHA-384消息摘要(长度为43的字节数组)
145.
146.
encodeSHA384(byte[]
147.
getSha384Digest().digest(data);
148.
149.
150.
151.
152.
153.
154.
SHA-384消息摘要(长度为86的十六进制字符串)
155.
156.
encodeSHA384Hex(byte[]
157.
(encodeSHA384(data));
158.
159.
160.
利用SHA-512消息摘要算法计算消息摘要
161.
162.
163.
164.
SHA-512消息摘要(长度为64的字节数组)
165.
166.
encodeSHA512(byte[]
167.
getSha512Digest().digest(data);
168.
169.
170.
171.
172.
173.
174.
SHA-512消息摘要(长度为128的十六进制字符串)
175.
176.
encodeSHA512Hex(byte[]
177.
(encodeSHA512(data));
178.
179.}
参考
下载地址:
系列的java实现
3.import
4.import
5.import
6.import
7.import
8./**
Hmac<
br/>
HmacMD5/HmacSHA/HmacSHA256/HmacSHA384/HmacSHA512
11.
13.public
Hmac
按照给定密钥生成算法创建密钥
密钥算法
密钥
getHmacKey(String
algorithm){
ppend("
"
()-1);
("
}"
();
void
main(String[]
args)
31.ength());
=
Mac数据"
;
加密前数据:
string:
+data);
byte[]:
+showByteArray()));
36.ength());
加密后数据:
+;
hexStr:
+(encodeData));
41.}