1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.codec.digest;
19
20 import static org.apache.commons.codec.binary.StringUtils.getBytesUtf8;
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertNotNull;
23
24 import java.io.ByteArrayInputStream;
25 import java.io.IOException;
26 import java.security.MessageDigest;
27 import java.util.Random;
28
29 import org.apache.commons.codec.binary.Hex;
30 import org.apache.commons.codec.binary.StringUtils;
31 import org.junit.Test;
32
33
34
35
36
37
38 public class DigestUtilsTest {
39
40 private final byte[] testData = new byte[1024*1024];
41
42
43
44
45 protected void setUp() throws Exception {
46 new Random().nextBytes(testData);
47 }
48
49 @Test
50 public void testConstructable() {
51 assertNotNull(new DigestUtils());
52 }
53
54 @Test(expected=IllegalArgumentException.class)
55 public void testInternalNoSuchAlgorithmException() {
56 DigestUtils.getDigest("Bogus Bogus");
57 }
58
59 @Test
60 public void testMd2Hex() throws IOException {
61
62 assertEquals("8350e5a3e24c153df2275c9f80692773", DigestUtils.md2Hex(""));
63
64 assertEquals("32ec01ec4a6dac72c0ab96fb34c0b5d1", DigestUtils.md2Hex("a"));
65
66 assertEquals("da853b0d3f88d99b30283a69e6ded6bb", DigestUtils.md2Hex("abc"));
67
68 assertEquals("ab4f496bfb2a530b219ff33031fe06b0", DigestUtils.md2Hex("message digest"));
69
70 assertEquals("4e8ddff3650292ab5a4108c3aa47940b", DigestUtils.md2Hex("abcdefghijklmnopqrstuvwxyz"));
71
72 assertEquals(
73 "da33def2a42df13975352846c30338cd",
74 DigestUtils.md2Hex("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789"));
75
76 assertEquals(
77 "d5976f79d83d3a0dc9806c3c66f3efd8",
78 DigestUtils.md2Hex("1234567890123456789012345678901234567890" + "1234567890123456789012345678901234567890"));
79
80 assertEquals(DigestUtils.md2Hex(testData),
81 DigestUtils.md2Hex(new ByteArrayInputStream(testData)));
82 }
83
84
85
86
87 @Test
88 public void testMd2HexLength() {
89 String hashMe = "this is some string that is longer than 32 characters";
90 String hash = DigestUtils.md2Hex(getBytesUtf8(hashMe));
91 assertEquals(32, hash.length());
92
93 hashMe = "length < 32";
94 hash = DigestUtils.md2Hex(getBytesUtf8(hashMe));
95 assertEquals(32, hash.length());
96 }
97
98
99
100
101 @Test
102 public void testMd2Length() {
103 String hashMe = "this is some string that is longer than 16 characters";
104 byte[] hash = DigestUtils.md2(getBytesUtf8(hashMe));
105 assertEquals(16, hash.length);
106
107 hashMe = "length < 16";
108 hash = DigestUtils.md2(getBytesUtf8(hashMe));
109 assertEquals(16, hash.length);
110 }
111
112 @Test
113 public void testMd5Hex() throws IOException {
114
115 assertEquals("d41d8cd98f00b204e9800998ecf8427e", DigestUtils.md5Hex(""));
116
117 assertEquals("0cc175b9c0f1b6a831c399e269772661", DigestUtils.md5Hex("a"));
118
119 assertEquals("900150983cd24fb0d6963f7d28e17f72", DigestUtils.md5Hex("abc"));
120
121 assertEquals("f96b697d7cb7938d525a2f31aaf161d0", DigestUtils.md5Hex("message digest"));
122
123 assertEquals("c3fcd3d76192e4007dfb496cca67e13b", DigestUtils.md5Hex("abcdefghijklmnopqrstuvwxyz"));
124
125 assertEquals(
126 "d174ab98d277d9f5a5611c2c9f419d9f",
127 DigestUtils.md5Hex("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789"));
128
129 assertEquals(
130 "57edf4a22be3c955ac49da2e2107b67a",
131 DigestUtils.md5Hex("1234567890123456789012345678901234567890" + "1234567890123456789012345678901234567890"));
132
133 assertEquals(DigestUtils.md5Hex(testData),
134 DigestUtils.md5Hex(new ByteArrayInputStream(testData)));
135 }
136
137
138
139
140 @Test
141 public void testMd5HexLength() {
142 String hashMe = "this is some string that is longer than 32 characters";
143 String hash = DigestUtils.md5Hex(getBytesUtf8(hashMe));
144 assertEquals(32, hash.length());
145
146 hashMe = "length < 32";
147 hash = DigestUtils.md5Hex(getBytesUtf8(hashMe));
148 assertEquals(32, hash.length());
149 }
150
151
152
153
154 @Test
155 public void testMd5Length() {
156 String hashMe = "this is some string that is longer than 16 characters";
157 byte[] hash = DigestUtils.md5(getBytesUtf8(hashMe));
158 assertEquals(16, hash.length);
159
160 hashMe = "length < 16";
161 hash = DigestUtils.md5(getBytesUtf8(hashMe));
162 assertEquals(16, hash.length);
163 }
164
165 @Test
166 public void testSha1Hex() throws IOException {
167
168 assertEquals("a9993e364706816aba3e25717850c26c9cd0d89d", DigestUtils.sha1Hex("abc"));
169
170 assertEquals("a9993e364706816aba3e25717850c26c9cd0d89d", DigestUtils.sha1Hex(getBytesUtf8("abc")));
171
172 assertEquals(
173 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
174 DigestUtils.sha1Hex("abcdbcdecdefdefgefghfghighij" + "hijkijkljklmklmnlmnomnopnopq"));
175 assertEquals(DigestUtils.sha1Hex(testData),
176 DigestUtils.sha1Hex(new ByteArrayInputStream(testData)));
177 }
178
179 @Test
180 public void testSha1UpdateWithByteArray(){
181 final String d1 = "C'est un homme qui rentre dans un café, et plouf";
182 final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
183
184 MessageDigest messageDigest = DigestUtils.getSha1Digest();
185 messageDigest.update(d1.getBytes());
186 messageDigest.update(d2.getBytes());
187 final String expectedResult = Hex.encodeHexString(messageDigest.digest());
188
189 messageDigest = DigestUtils.getSha1Digest();
190 DigestUtils.updateDigest(messageDigest, d1.getBytes());
191 DigestUtils.updateDigest(messageDigest, d2.getBytes());
192 final String actualResult = Hex.encodeHexString(messageDigest.digest());
193
194 assertEquals(expectedResult, actualResult);
195 }
196
197 @Test
198 public void testSha1UpdateWithString(){
199 final String d1 = "C'est un homme qui rentre dans un café, et plouf";
200 final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
201
202 MessageDigest messageDigest = DigestUtils.getSha1Digest();
203 messageDigest.update(StringUtils.getBytesUtf8(d1));
204 messageDigest.update(StringUtils.getBytesUtf8(d2));
205 final String expectedResult = Hex.encodeHexString(messageDigest.digest());
206
207 messageDigest = DigestUtils.getSha1Digest();
208 DigestUtils.updateDigest(messageDigest, d1);
209 DigestUtils.updateDigest(messageDigest, d2);
210 final String actualResult = Hex.encodeHexString(messageDigest.digest());
211
212 assertEquals(expectedResult, actualResult);
213 }
214
215 @Test
216 public void testSha256() throws IOException {
217
218 assertEquals("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
219 DigestUtils.sha256Hex("abc"));
220 assertEquals("ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
221 DigestUtils.sha256Hex(getBytesUtf8("abc")));
222 assertEquals("248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
223 DigestUtils.sha256Hex("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"));
224
225 assertEquals(DigestUtils.sha256Hex(testData),
226 DigestUtils.sha256Hex(new ByteArrayInputStream(testData)));
227 }
228
229 @Test
230 public void testSha384() throws IOException {
231
232 assertEquals("cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" +
233 "8086072ba1e7cc2358baeca134c825a7",
234 DigestUtils.sha384Hex("abc"));
235 assertEquals("cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed" +
236 "8086072ba1e7cc2358baeca134c825a7",
237 DigestUtils.sha384Hex(getBytesUtf8("abc")));
238 assertEquals("09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712" +
239 "fcc7c71a557e2db966c3e9fa91746039",
240 DigestUtils.sha384Hex("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
241 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"));
242 assertEquals(DigestUtils.sha384Hex(testData),
243 DigestUtils.sha384Hex(new ByteArrayInputStream(testData)));
244 }
245
246 @Test
247 public void testSha512() throws IOException {
248
249 assertEquals("ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
250 "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
251 DigestUtils.sha512Hex("abc"));
252 assertEquals("ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
253 "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
254 DigestUtils.sha512Hex(getBytesUtf8("abc")));
255 assertEquals("8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" +
256 "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909",
257 DigestUtils.sha512Hex("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
258 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"));
259 assertEquals(DigestUtils.sha512Hex(testData),
260 DigestUtils.sha512Hex(new ByteArrayInputStream(testData)));
261 }
262
263 @SuppressWarnings("deprecation")
264 @Test
265 public void testShaHex() throws IOException {
266
267 assertEquals("a9993e364706816aba3e25717850c26c9cd0d89d", DigestUtils.shaHex("abc"));
268
269 assertEquals("a9993e364706816aba3e25717850c26c9cd0d89d", DigestUtils.shaHex(getBytesUtf8("abc")));
270
271 assertEquals(
272 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
273 DigestUtils.shaHex("abcdbcdecdefdefgefghfghighij" + "hijkijkljklmklmnlmnomnopnopq"));
274 assertEquals(DigestUtils.shaHex(testData),
275 DigestUtils.shaHex(new ByteArrayInputStream(testData)));
276 }
277
278 @SuppressWarnings("deprecation")
279 @Test
280 public void testShaUpdateWithByteArray(){
281 final String d1 = "C'est un homme qui rentre dans un café, et plouf";
282 final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
283
284 MessageDigest messageDigest = DigestUtils.getShaDigest();
285 messageDigest.update(d1.getBytes());
286 messageDigest.update(d2.getBytes());
287 final String expectedResult = Hex.encodeHexString(messageDigest.digest());
288
289 messageDigest = DigestUtils.getShaDigest();
290 DigestUtils.updateDigest(messageDigest, d1.getBytes());
291 DigestUtils.updateDigest(messageDigest, d2.getBytes());
292 final String actualResult = Hex.encodeHexString(messageDigest.digest());
293
294 assertEquals(expectedResult, actualResult);
295 }
296
297 @SuppressWarnings("deprecation")
298 @Test
299 public void testShaUpdateWithString(){
300 final String d1 = "C'est un homme qui rentre dans un café, et plouf";
301 final String d2 = "C'est un homme, c'est qu'une tête, on lui offre un cadeau: 'oh... encore un chapeau!'";
302
303 MessageDigest messageDigest = DigestUtils.getShaDigest();
304 messageDigest.update(StringUtils.getBytesUtf8(d1));
305 messageDigest.update(StringUtils.getBytesUtf8(d2));
306 final String expectedResult = Hex.encodeHexString(messageDigest.digest());
307
308 messageDigest = DigestUtils.getShaDigest();
309 DigestUtils.updateDigest(messageDigest, d1);
310 DigestUtils.updateDigest(messageDigest, d2);
311 final String actualResult = Hex.encodeHexString(messageDigest.digest());
312
313 assertEquals(expectedResult, actualResult);
314 }
315
316 }