在JAVA开发的过程中,我们会经常用到MD5加密,什么是MD5加密。
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
简单来说,我们输入后,根据算法,可以在代码里生成32位的字符串,我们也可以用这个来校验文件的合法性,经常玩游戏的知道,下载安装包后,游戏官网一般会提供MD5校验的工具,原理类似,下面就直接贴出代码,复制到项目里即可使用。
代码如下:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
private static MessageDigest messageDigest = null;
static {
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nsaex) {
}
}
public final static String strMD5(String s) {
char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
try {
byte[] btInput = s.getBytes();
MessageDigest mdInst = MessageDigest.getInstance("MD5");
mdInst.update(btInput);
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String fileMD5(InputStream is) {
byte[] buffer = new byte[4096];
int numRead;
try {
while ((numRead = is.read(buffer)) > 0) {
messageDigest.update(buffer, 0, numRead);
}
} catch (IOException e) {
return "";
}
BigInteger i = new BigInteger(1, messageDigest.digest());
return String.format("%1$032X", i);
}
public static void main(String[] args) throws FileNotFoundException {
System.out.println(MD5("123456"));
}
}
用法很简单:
- 字符串:调用strMD5;
- 文件:转换为输入流,调用fileMD5;
