(一)用MessageDigest类对信息加密(已经加密,但密文显示方式未处理):
md5加密核心代码:
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
通过字节数组显示密文:
System.out.println("b.len="+b2.length);
for(int i=0;i<b2.length;i++){
System.out.print(b2[i]+" ");
}
通过字符显示密文:
System.out.println();
for(int i=0;i<b2.length;i++){
System.out.print((char)(b2[i])+" ");
}
(二)用MessageDigest类对信息加密(与前面相比,怪字符少一些,但还不是16进制):
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
注意此处用BASE74Encoder需要导入jar包,JavaAPI中是没有的:
BASE64Encoder en=new BASE64Encoder();
String pwd2 =en.encode(b2);
System.out.println(pwd2);
(三)用MessageDigest类对信息加密(我们手动写代码,把md5生成的密文转换成16进制):
@Test
public void demo3() throws NoSuchAlgorithmException{
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
String pwd2="";
for(byte i: b2){
String s = Integer.toHexString(i & 0xff);
if(s.length()==1){
s ="0"+s;
}
pwd2 +=s;
}
pwd2 = pwd2.toUpperCase();
System.out.println(pwd2.length());
System.out.println(pwd2);
}
完整代码示例:
package teachDemo;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.junit.Test;
import Decoder.BASE64Encoder;
public class Md5Demo {
/**
* 加密算法类:java.security.MessageDigest
*/
@Test
public void demo1() throws NoSuchAlgorithmException{
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
System.out.println("b.len="+b2.length);
for(int i=0;i<b2.length;i++){
System.out.print(b2[i]+" ");
}
System.out.println();
for(int i=0;i<b2.length;i++){
System.out.print((char)(b2[i])+" ");
}
}
/**
* 把md5生成的密文转换成我们习惯的方式---与前面相比,怪字符少一些,但还不是16进制
*/
@Test
public void demo2() throws NoSuchAlgorithmException{
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
BASE64Encoder en=new BASE64Encoder();
String pwd2 =en.encode(b2);
System.out.println(pwd2);
}
/**
* 我们手动写代码,把md5生成的密文转换成16进制
* @throws NoSuchAlgorithmException
*/
@Test
public void demo3() throws NoSuchAlgorithmException{
MessageDigest md=MessageDigest.getInstance("MD5");
String pwd="1234";
byte[] b1=pwd.getBytes();
byte[] b2=md.digest(b1);
String pwd2="";
for(byte i: b2){
String s = Integer.toHexString(i & 0xff);
if(s.length()==1){
s ="0"+s;
}
pwd2 +=s;
}
pwd2 = pwd2.toUpperCase();
System.out.println(pwd2.length());
System.out.println(pwd2);
}
}