md5加密及防止篡改

md5加密

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),它是一种单向加密算法,可以将输入的信息加密转换为128位固定长度的散列值,用于检验数据传输过程中的完整性。

特点:
1.不可逆运算
2. 具有高度的离散性
3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
4.弱碰撞性

作用:
1.密码的加密存储
2.一致性检验
3.文件上传等等

简单实现方式如下:
public static String getMD5String(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance(“MD5”);
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
具体事例:
云笔记的加密:
public class TestMD5 {

public static void main(String[] args) {
	String content=readFileByBytes("");
	try {
		System.out.println(md52(content));
		//公开密文:133524c54a3c940ffb9a827650f88672
		         
	} catch (Exception e) {
		e.printStackTrace();
	}
}

public static String readFileByBytes(String fileName) {
	StringBuffer sb = new StringBuffer();
	try {
		 File file = new File(fileName);
	        InputStream in = null;
	        
	            if (file.isFile() && file.exists()) { //判断文件是否存在
	                //System.out.println("以字节为单位读取文件内容,一次读多个字节:");
	                // 一次读多个字节
	                byte[] tempbytes = new byte[1024];
	                int byteread = 0;
	                in = new FileInputStream(file);
	                // 读入多个字节到字节数组中,byteread为一次读入的字节数
	                while ((byteread = in.read(tempbytes)) != -1) {
	                    //  System.out.write(tempbytes, 0, byteread);
	                    String str = new String(tempbytes, 0, byteread);
	                    sb.append(str);
	                }
	            } 
	            
	}catch(Exception e) {
		
	}finally {
		return sb.toString();
	}
   
}
// 带秘钥加密
public static String md5(String text, String key) throws Exception {
	// 加密后的字符串
	String md5str = DigestUtils.md5Hex(text + key);
	System.out.println("MD5加密后的字符串为:" + md5str);
	return md5str;
}


// 不带秘钥加密
	public static String md52(String text) throws Exception {
		// 加密后的字符串
		String md5str = DigestUtils.md5Hex(text);
		//System.out.println("MD52加密后的字符串为:" + md5str + "\t长度:" + md5str.length());
		return md5str;
	}
/**
 * MD5验证方法
 * 
 * @param text明文
 * @param key密钥
 * @param md5密文
 */
// 根据传入的密钥进行验证
public static boolean verify(String text, String key, String md5) throws Exception {
	String md5str = md5(text, key);
	if (md5str.equalsIgnoreCase(md5)) {
		System.out.println("MD5验证通过");
		return true;
	}
	return false;
}

}

实现结果:
在这里插入图片描述

一分耕耘一分收获

你可能感兴趣的:(#,JavaEE)