Skip to content

Commit 1a9a743

Browse files
committed
use another hash function if MD5 is not available
1 parent c866d2b commit 1a9a743

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

AndroidAsync/src/com/koushikdutta/async/util/FileCache.java

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import java.math.BigInteger;
77
import java.security.MessageDigest;
88
import java.security.NoSuchAlgorithmException;
9+
import java.security.Provider;
10+
import java.security.Security;
911
import java.util.ArrayList;
1012
import java.util.Collections;
1113
import java.util.Comparator;
@@ -41,17 +43,42 @@ public void close() {
4143
}
4244
}
4345

46+
private static String hashAlgorithm = "MD5";
47+
48+
private static MessageDigest findAlternativeMessageDigest() {
49+
if ("MD5".equals(hashAlgorithm)) {
50+
for (Provider provider : Security.getProviders()) {
51+
for (Provider.Service service : provider.getServices()) {
52+
hashAlgorithm = service.getAlgorithm();
53+
try {
54+
MessageDigest messageDigest = MessageDigest.getInstance(hashAlgorithm);
55+
if (messageDigest != null)
56+
return messageDigest;
57+
} catch (NoSuchAlgorithmException ignored) {
58+
}
59+
}
60+
}
61+
}
62+
return null;
63+
}
64+
4465
public static String toKeyString(Object... parts) {
45-
try {
46-
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
47-
for (Object part: parts) {
48-
messageDigest.update(part.toString().getBytes());
66+
MessageDigest messageDigest;
67+
synchronized (FileCache.class) {
68+
try {
69+
messageDigest = MessageDigest.getInstance(hashAlgorithm);
70+
} catch (NoSuchAlgorithmException e) {
71+
messageDigest = findAlternativeMessageDigest();
72+
if (null == messageDigest)
73+
throw new RuntimeException(e);
4974
}
50-
byte[] md5bytes = messageDigest.digest();
51-
return new BigInteger(1, md5bytes).toString(16);
52-
} catch (NoSuchAlgorithmException e) {
53-
throw new RuntimeException(e);
5475
}
76+
77+
for (Object part : parts) {
78+
messageDigest.update(part.toString().getBytes());
79+
}
80+
byte[] md5bytes = messageDigest.digest();
81+
return new BigInteger(1, md5bytes).toString(16);
5582
}
5683

5784
boolean loadAsync;

0 commit comments

Comments
 (0)