MD5加密算法
MD5加密步骤:1、
MessageDigest.getInstance("MD5");获取一个md5实例,会抛出NoSuchAlgorithmException没有此算法异常 2、调用digest(byte[] b) ,messageDigest.digest("1234".getBytes());进行加密,参数为byte[]数组,加密后还是返回byte[]数组 3、将加密后byte[]数组,每一个byte用16进制,与0xff进行与&操作,然后 Integer.toHexString(result),将该byte转换成一个16进制的字符串, 4、3步骤中,可能会出现一个的字符串,此时,需要进行判断,将只有一个字符串的byte,在其前面加上一个0,凑齐两个数 |
MD5拓展: a) md5在线解密: http://www.cmd5.com/ b) webqq: http://web2.qq.com/ 进行三次MD5加密-将加密后的密文再进行加密 |--md5(md5(md5($pass))) 第一次加密后,结果转换成小写,对结果再加密一次,结果转换成小写,对结果再加密一次,上面那网站支持。 c)银行密码:6位数字,进行10~20次MD5加密 |
代码: package cn.zengfansheng.md5;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5DigestDemo {
public static void main(String[] args) throws NoSuchAlgorithmException {
// 1、获取一个MD5加密器
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
// 2、进行加密,返回加密后的byte[]数组
byte[] digest = messageDigest.digest("1234".getBytes());
// 3、加密后将每一个byte转换成16进制的字符串表示
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
int result = b & 0xff;// 3-1将每一个byte(8位),进行与操作0xff
String hexString = Integer.toHexString(result);// 3-2转成16进制字符串表示
//System.out.print(hexString + " ");// 81 dc 9b db 52 d0 4d c2 0 36 db d8 31 3e d0 55
if (hexString.length() == 1) {// 3-3 如果某一位转换成16进制是一位数字,那么在其前面加上0
hexString = "0" + hexString;
}
System.out.print(hexString + " ");//81 dc 9b db 52 d0 4d c2 00 36 db d8 31 3e d0 55
sb.append(hexString);
}
System.out.println(" " + sb.toString());
}
} |
MD5加密工具类: package cn.zengfansheng.mobilesafe.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* 1、MD5 加密类
*
* @author hacket
*/
public class MD5Utils {
/**
* 1、将明文plainText进行加密返回
* @param plainText 要进行加密的明文
* @return 返回明文,传入为null,那么返回null
*/
public static String encode(String plainText) {
if (plainText!=null) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("md5");
byte[] bytes = messageDigest.digest(plainText.getBytes());
StringBuilder stringBuilder = new StringBuilder();
for (byte b : bytes) {
int result = b & 0xff;
String hexString = Integer.toHexString(result);
if (hexString.length() == 1) {
stringBuilder.append("0");
}
stringBuilder.append(hexString);
}
return messageDigest.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace(); // can't reach 不可达到的异常,所以处理掉
return null;
}
}else {
return null;
}
}
} |