MD5加密

一、划重点

1.不管内容多长,最终加密后得到的密文都是32位

2.MessageDigest

此类为应用程序提供信息摘要算法的功能,如MD5或SHA算法。信息摘要是安全的单向哈希函数,它接受任意大小的数据,并输出固定长度的哈希值
 MessageDigest对象开始被初始化,通过使用update方法处理数据。任何时候都可以调用reset方法重置摘要,一旦全部需要更新的数据都已被更新,应该调用digest方法完成哈希计算

3.为保证MD5加密的可靠性,可以将内容进行多次md5加密或者选择加salt值,得到的结果始终是32位

二、MD5工具类

public class MD5Utils {
	
	/**
	 * 将明文通过md5加密为32位的密文
	 * @param str
	 * @return
	 * @throws Exception
	 */
	public static String md5Encode(String str) throws Exception {
		MessageDigest md5 = MessageDigest.getInstance("md5");
		
		//得到的字节数组是16个数字
		byte[] bytes = md5.digest(str.getBytes("utf-8"));
		String[] digitals = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
		
		StringBuffer buff = new StringBuffer();
		for(int i=0; i

通过调用digest方法得到的就是对应的信息摘要,只要内容不变,得到的结果就不变,得到的这个byte数组是固定的16个数字,byte的范围是-128-127, 然后后面的操作就是将每个数组变成两个0-15之间的数字,对应digitals数组的下标,也就是要变成两个16进制的数字。

三、适当改造

1.如果你觉得这个还不是很靠谱,你可以进行多次加密,结果始终是32位字符串

String result = md5Encode(md5Encode(md5Encode(str)));

2.或者选择加salt值的方式

String salt = "salt";
String result = md5Encode(md5Encode(str)+salt);

 

你可能感兴趣的:(java)