数据加密算法之MD5和SHA1
这个星期记录一下数据加密算法,记得刚开始学编程的时候就有一个疑问:我们的密码就这么放在数据库里面,多不安全啊,数据库管理员不是拿着数据想干嘛就干嘛吗?但是由于认知有限,一直没有解决这个问题,直到去年实习时,当时的项目经理Zack说,用户密码不能明文存放到数据,必须经过MD5加密,终于解决了这个问题。因为MD5的不可逆性,所以就算知道MD5码,只要你不是一些弱密码,一般情况下发生泄密的可能性是非常非常小的,几乎可以认为是绝对安全的,但MD5实现的实现却很简单,今天就记录一下实习时用到的一个MD5加密算法的一个实现:
package cn.bridgeli.demo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Encryption { public static String MD5(String input) { StringBuffer hexString = null; try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 mdInst.update(input.getBytes()); // 获得密文 byte[] md = mdInst.digest(); // 把密文转换成十六进制的字符串形式 hexString = new StringBuffer(); // 字节数组转换为 十六进制 数 for (int i = 0; i < md.length; i++) { String shaHex = Integer.toHexString(md[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return hexString.toString(); } public static String SHA1(String decript) { StringBuffer hexString = null; try { MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); digest.update(decript.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String hexString = new StringBuffer(); // 字节数组转换为 十六进制 数 for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return hexString.toString(); } }
这里面还有一个SHA1机密算法的实现,主要是在自学微信开发时,微信在接入验证的数据经过字典排序后SHA1加密,所以就顺便记录了一下,算是两个比较常用的加密算法吧,供大家参考。
PS:1. 因为MD5加密之后的数据是32位的,所以在设计数据库密码那一栏的长度肯定是32,短了不够用,长了资源浪费;
2. MD5的应用非常广泛,用于密码加密只是一个小应用,在我们的生活中被广泛应用,例如我们在下载一些软件时,很多在旁边都标注有MD5的值,因为MD5之后是唯一的,所以我们可以在网上找一个MD5校验器,看看这个文件的MD5值,看和官网上给出的MD5是否一致,如果一致那么这个文件就没有被人修改过,那么这个文件就可以被认为是安全的,否则就有可能被别人动过手脚了,这时你就要小心了。
全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/128
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
作 者: BridgeLi,https://www.bridgeli.cn
原文链接:http://www.bridgeli.cn/archives/128
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
你应该把MD5的算法内容讲一下,这样单纯的调用还是不明白原理。
嗯,是的,谢谢你的建议,其实这主要是我个人的学习笔记,还是想以实用为主,有些东西将来用到了可以直接拿来用就是了;等将来水平了上来了,会考虑写一些原理性的文章