天天看點

MD5在Java中的使用方法

@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);

    }