@Test
public void demo1() throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd = "1234";
byte b1[] = pwd.getBytes();
byte[] b2 = md.digest( b1 );
for(byte b: b2){
System.out.print((char)b+" ");
}
System.out.println();
}
//用java提供的BASE64Encoder這個類幫我們把密文轉換成我們喜歡的方式
@Test
public void demo2() throws Exception{
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);
}
//這種方式通常是程式員最喜歡的: 1)字元全是16進制的數 2)自己還可稍變種一下
@Test
public void demo3() throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd = "";
byte b1[] = pwd.getBytes();
byte[] b2 = md.digest( b1 );
System.out.println("len1:"+b2.length); //一定是16
//手動把每個位元組轉換成兩個16進制數
String pwd2="";
for(byte i:b2){
String s = Integer.toHexString(i&0xff);
//為最終産生32位的密文,需要把隻轉成1位16進制數的密文補成2位
if(s.length()==1){
//s="0"+s;
s = "a"+s; //具體怎麼個補法,程式員可以自己随意變化,這就是變種
}
pwd2 +=s;
}
pwd2 = pwd2.toUpperCase();
System.out.println("len2:"+pwd2.length()); //32
System.out.println(pwd2);
}