新手必学的加密算法:MD5加密
MD5Util类里面的内容:
package com.neuedu.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
private static final char[] HEX = new char[] {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
public static String md5(String source) {
try {
//1、返回现实指定摘要算法的MessageDigest对象
MessageDigest messageDigest=MessageDigest.getInstance("MD5");
//2、获取字节,string-》byte
byte[] input = source.getBytes();
//3、使用指定的byte更新摘要
messageDigest.update(input);
//4、加密:通过执行诸如填充之类的最终操作完成希哈运算:128位(16字节) 的散列值
byte[] bytes =messageDigest.digest();
//1字节 = 8位 : 35 -> 0010 0011
//长度:16 {-89, -70, -62, 35, -97, -51, -53, 58, 6, 121, 3, -40, 7, 124, 74, 7}
//System.out.println("长度:" + bytes.length + " " +Arrays.toString(bytes));
//5.将128位的MD5散列表示为长度为32的十六进制数字
/*int b = -89;
//获取左边四位
System.out.println(Integer.toBinaryString(b)); //111111111111111111111111 1010 0111
System.out.println(Integer.toBinaryString(b>>>4)); //000011111111111111111111 1111 1010 无符号右移4位
//000000000000000000000000 0000 1111 为了将左四位的1去掉,需要与十六进制的F进行与&运算
System.out.println(Integer.toBinaryString(b>>>4 & 0xF));//000000000000000000000000 0000 1010 左边的四位
//获取右边的四位
System.out.println(Integer.toBinaryString(b)); //111111111111111111111111 1010 0111
//000000000000000000000000 0000 1111 为了将右四位前面的1去掉,需要与十六进制的F进行与&运算
System.out.println(Integer.toBinaryString(b & 0xF)); //000000000000000000000000 0000 0111 右边的四位
//十进制
System.out.println(b>>>4 & 0xF);//10
System.out.println(b & 0xF); //7
//十六进制
System.out.println(Integer.toHexString(b>>>4 & 0xF));//a
System.out.println(Integer.toHexString(b & 0xF)); //7*/
//对密码进行加密,写属于自己的算加密算法,上面的是供你使用的一部分,就是说这一段算法随你自己安排,这里只是一个示范作用。
//①创建一个字符数组用来存值
char[] chars = new char[bytes.length*2];
int k =0;
for (int i = 0; i < bytes.length; i++) {
byte b= bytes[i];
//将这个16位里面的的值逐一进行拆分,具体拆分请看上面 的做法,
chars[k++]= HEX[b>>>4 & 0xF];
chars [k++]= HEX[b & 0xF];
}
return new String (chars);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
测试类:test
package com.neuedu.util;
public class test {
public static void main(String[] args) {
System.out.println(MD5Util.md5("zhowen"));
}
}
使用方法和测试里面的一样。