MD5加密算法流程
来源:互联网 发布:360软件卸载大师 编辑:程序博客网 时间:2024/06/08 06:51
MD5:Message-Digest Algorithm 5(信息-摘要算法),属于哈希散列算法一类,对于MD5而言,有两个特性是很重要的,
第一:明文数据经过散列以后的值是定长的;
第二:任意一段明文数据,经过散列以后,其结果必须永远是不变的。
前者的意思是可能存在有两段明文散列以后得到相同长度的结果,后者的意思是如果我们散列特定的数据,得到的结果一定是相同的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的(32位)十六进制数字串)。
算法原理:对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
Java实现MD5过程:
1、通过单例的构造方法获取MessageDigest实例,并指定加密算法类型;
2、将需要加密的字符串加盐后转换成byte数组后进行随机哈希过程;
3、MessageDigest对字节数组进行摘要,得到摘要字节数组;
4、循环遍历生成的byte类型数组,让其生成32位字符串,然后拼接字符串得到MD5值;
代码如下:
public class MD5Util { /** * 对指定的字符串进行MD5加密处理 * @param password 待加密的原始密码值 * @return MD5加盐加密后的密码值 */ public static String encodePassword(String password) { try { // 密码加盐处理,确保密码更加安全 password = password + "neuyimi"; // 获取MessageDigest实例,并指定加密算法类型 MessageDigest digest = MessageDigest.getInstance("MD5"); // 将需要加密的字符串转换成byte数组后进行随机哈希过程 byte[] byteArray = password.getBytes(); // 信息摘要对象对字节数组进行摘要,得到摘要字节数组 byte[] md5Byte = digest.digest(byteArray); StringBuffer buffer = new StringBuffer(); // 循环遍历byte类型数组,让其生成32位字符串 for (byte b : md5Byte) { int i = b & 0xff; String str = Integer.toHexString(i); if (str.length() < 2) { str = "0" + str; } buffer.append(str); } return buffer.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; }}
注:MD5是不可逆的,也就是没有对应的算法,把转换后的MD5值逆向得到原始密码数据;下面要说但是了,但是如果使用暴力破解,那也没办法,毕竟网上大神很多,保不齐大神用什么方法就能逆向获取到原始密码;现在网上也有很多MD5解密工具,可以试试,简单的MD5加密后的密码还是可以解密的,但是如果加盐以后,很多就破解不了啦!
- MD5加密算法流程
- MD5加密算法
- md5加密算法
- MD5加密算法
- MD5加密算法
- 加密算法MD5
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- MD5加密算法
- 'md5加密算法
- md5加密算法
- MD5加密算法
- 对称密码&公钥密码
- java中方法的重载(重载的定义、特点和好处)
- [编程题] 疯狂队列
- 干货分享:oracle数据库基础知识精讲视频!
- 洛谷:P1046 陶陶摘苹果 题解
- MD5加密算法流程
- 街区最短路径问题
- 结构、联合、位字段
- Godsend CodeForces
- oracle学习笔记
- 安卓自动化之uiautomator(Python篇)三 Uiobject
- 悬浮上去有效果的照片墙
- java:String、StringBuffer与StringBuilder
- IOS开发