在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;