往往有这种需求:不想让别人清晰的看见把从网上down下来的资源名字和类型。
可以先把down下来的资源名字通过MD5转换下在保存到本地。
MD5 是
消息摘要算法,就像 hashCode 一样,在计算的过程中会丢弃很多的原始数据,MD5 是无法还原为原文的,就像字符串的 hashCode 并不能还原为字符串一样。
如果密文长度是固定的加密算法,基本上都可以认定为是消息摘要算法,是不能还原原文的。消息摘要一般只是用于 验证原文的有效性看看是否被撰改过。
一般使用MD5进行检验时,
往往是将传来的明文数据再次MD5加密,然后和存储在数据库中的MD5内容进行比对,以进行正确性判断。
MD5 其实不是加密, 是HASH. HASH 原理就是产生
1对1不可逆的。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public final class MD5Util {
private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static String md5(String s) {
try {
// 使用MD5创建MessageDigest对象
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
return toHexString(messageDigest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return s;
}
private static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
}