最初见到MD5这个字眼是在下载一些东西的时候,看到了MD5校验。MD5在软件发布时经常使用,是为了保证文件的正确性,防止一些人修改(甚至盗用版权),设计的一套验证系统。
后面再次使用到MD5,是在javaEE的数据库设计是,考虑到用户的密码的安全性,如果是明文,那么,信息就容易泄露,所以需要给密码进行加密,为什么使用MD5?
MD5的特点(摘抄于网络)
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
这次,我想说的是MD5并不是不能被破解的,其中百度搜索MD5,一堆加密,解密的在线网站,本人亲测,简单字符串是可以被破解
在之前的看过的一个视频中提到(这是暴力破解,跑字典---》在之前玩了会wifi破解,就是使用跑字典的方式),所以在一般情况下,
MD5还是可用的,个人字符串太简单,那是个人对密码的不够严谨。
java中使用MD5,,可以在网络上找一些算法(如下)
/**利用MD5进行加密 * @param str 待加密的字符串 * @return 加密后的字符串 * @throws NoSuchAlgorithmException 没有这种产生消息摘要的算法 * @throws UnsupportedEncodingException */ public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //确定计算方法 MessageDigest md5=MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); //加密后的字符串 String newstr=base64en.encode(md5.digest(str.getBytes("utf-8"))); return newstr; }
在此我附上一个我收集的MD5工具类
package XXX; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { /** * 使用md5的算法进行加密 */ public static String md5(String plainText) { byte[] secretBytes = null; try { secretBytes = MessageDigest.getInstance("md5").digest( plainText.getBytes()); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("没有md5这个算法!"); } String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字 // 如果生成数字未满32位,需要前面补0 for (int i = 0; i < 32 - md5code.length(); i++) { md5code = "0" + md5code; } return md5code; } public static void main(String[] args) { System.out.println(md5("123")); } }
在javaEE的后期,你肯定会接触到spring框架,那么在MD5这方面,你就可以更方便的使用了
使用spring自带的MD5的工具类(自行百度)
好像jdk中就有(自行百度)
本人只用过工具类和spring自带的方法。MD5就到这了。方法很多,够用就行。概念很多,百度就行,切勿背代码!