md5加密工具怎么用(文件md5加密方法)

不知道大家有没有想过这种事情:我们去银行取钱,输上自己的银行卡号,输上密码,就能取出钱,那我们的密码会不会被银行的工作人员知道啊?

答案当然是不会的,这是因为我们设置的密码,会被经过一系列的加密处理,生成一个字符串,然后在数据库库里存放这个字符串,即使银行工作人员看到这个字符串也推不出取钱的六位数密码。

例如我们输入的密码为123abc,在数据库存储时一般为加密后的字符jsakjsa45ds5dsas5sa(我随便写的一个字符串,哈哈)

概念:

 1、这里的123abc,我们称为明文

 2、这里的jsakjsa45ds5dsas5sa,我们称为密文

加密处理是:将明文转为密文,存储到数据库,且过程不可逆。

加密一般有两种:双向密码和单向加密。双向加密码是最常用的,它既能加密又能解密;单向加密只能对数据进行加密,不能对其解密,MD5加密是单向加密。

介绍完基本概念了,我们来介绍一下MD5加密技术。

MD5简介:

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。MD5的前身有MD2、MD3和MD4。

MD5是唯一的吗?

不唯一,一个32位字符串无法加密无数的事物。

MD5能被破解吗?

该技术自称可以破解,但是需要至少一百多年。

虽然网上说有破解方法,例如穷举法,彩虹表,但是这些方法并非真正完美的破解出来。

MD5的作用

既然是加密技术,那肯定是为了让一些东西不能随便让人看到,比如保存到数据库的密码,也是MD5用的比较多的。还有文件完整性的校验,文件的上传等。

MD5算法具有以下特点:

 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

 2、容易计算:从原数据计算出MD5值很容易。

 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

 4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

除了MD5以外,其中比较有名加密技术还有sha-1、RIPEMD以及Haval等。

java中的MD5加密技术代码:

第一种:仅将密码通过md5技术加密一次,不够安全,例如常见的123456这种密码,就很容易测试出md5加密后的字符串,彩虹表里面就是存储着大量的这种加密之前和之后的字符串,通过穷举法就比较容易的推算出来。

由于代码的排版不好,所以下面以一张图片和可复制的代码方式展示:

md5加密工具怎么用(文件md5加密方法)

可复制的代码:

class Untitled { public static void main(String[] args) { String encryptionPassword =md5Encryption(); System.out.println(“加密的结果:” encryptionPassword); } //封装了一个加密方法 public String md5Encryption(){Stringpassword=”123456″; try { // 获取MD5加密工具 MessageDigest md5 = MessageDigest.getInstance(“md5”); } catch (Exception e){ e.printStackTrace(); } // 加密 byte[] digest = md5.digest(password.getBytes()); // 获取二进制十六进制互转工具 HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter(); // 将二进制数组转换为十六进制字符串 String encryptionPassword = hexBinaryAdapter.marshal(digest); return encryptionPassword; }}

可复制的代码:

第二种:加点盐值,两次或者进行多次MD5加密。class Untitled { public static void main(String[] args) { String encryptionPassword =md5Encryption(); System.out.println(“加密的结果:” encryptionPassword); } //封装了一个加密方法 public String md5Encryption(){ String password = “123456”; //生成一个5位的随机数 String randomNumber = UUID.randomUUID().toString().replaceAll(“-“, “”).substring(0, 5); try { // 获取MD5加密工具 MessageDigest md5 = MessageDigest.getInstance(“md5”); } catch (Exception e){ e.printStackTrace(); } // 第一次加密 byte[] digest1 = md5.digest(password.getBytes()); // 获取二进制十六进制互转工具 HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter(); // 将二进制数组转换为十六进制字符串 String encryptionPassword1 = hexBinaryAdapter.marshal(digest1); //第二次加密 String salt2 = encryptionPassword1 randomNumber; byte[] digest2 = md5.digest(sort2.getBytes()); String encryptionPassword2 = hexBinaryAdapter.marshal(digest2); return encryptionPassword2; }}

备注:这里随机生成的5位随机数,成为盐值,例如密码是123456,我们可以通过MD5技术直接测试出它为e10adc3949ba59abbe56e057f20f883e,这是固定的映射组合,那我们随机加入一个几位数的字符串,那么再经过md5加密后,就很难知道它的密码是123456,大大提高了安全性。

可复制的代码:

也可以封装一下:

class Untitled { public static void main(String[] args) { //生成一个5位的随机数 String salt = UUID.randomUUID().toString().replaceAll(“-“, “”).substring(0, 5); String password = “123456”; String encryptionPassword1 = md5Encryption(password,salt); System.out.println(“第一次加密的结果:” encryptionPassword1); String encryptionPassword2 = md5Encryption(encryptionPassword1,null); System.out.println(“第二次加密的结果:” encryptionPassword2); } //封装了一个加密方法 public String md5Encryption(String password,String salt){ //创建需要加密的字符串 (加盐了) String encryptionString = password salt; MessageDigest md5 = null; try { //获取MD5加密工具 md5 = MessageDigest.getInstance(“md5”); }catch (Exception e){ e.printStackTrace();} // 加密 byte[] digest = md5.digest(encryptionString.getBytes()); // 获取二进制十六进制互转工具 HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter(); // 将二进制数组转换为十六进制字符串 String encryptionPassword = hexBinaryAdapter.marshal(digest); return encryptionPassword; }}

怎么测试自己的数据加密后是加密正确的呢?

可以去百度的MD5加密在线工具,例如:http://md5jiami.51240.com

将自己的初始密码,运行出结果,与MD5在线工具测试出的数据对比。

再将加密后的结果,跟其对比。

相同就表示成功了,不相同可能是自己哪里写错了。

在其他方面:

数据库中也有md5加密函数

可复制的代码:

批量加密 如果我们要对Upwd这一列数据进行加密,语法是: update test set Upwd = md5(Upwd);单独加密如果单独对某个用户(如Tom)的密码加密:语法是: update test set Upwd = md5(Upwd) where Uname = “Tom”;插入数据 如果想要插入新的数据,语法为: insert into test(Uname,Upwd) values(“Jerry”,md5(“123456”));

总结:在软件开发中,加密技术还是十分重要的,例如银行系统、支付系统、密码系统等等都需要进行运用加密技术,而MD5技术又是加密技术中比较流行、常用的,因此掌握它是十分有必要的。

加油!加油!加油!

一个在互联网苟且偷生的研究生

发表评论

登录后才能评论