MD5加密解密

public static void main(String[] args) {
        //t1();
        /*t2();*/
        //t3();
        String s=new String("wanghuailou");
        System.out.println("原始:"+s);
        System.out.println("MD5後:"+t4(s));
        System.out.println("加密的:"+converMD5(s));
        System.out.println("解密的:"+converMD5(converMD5(s)));
    }
/**
     * 加密解密算法 執行一次加密,兩次解密
     * @param inStr
     * @return
     */
    public static String converMD5(String inStr){
        char[]a=inStr.toCharArray();
        for (int i=0;i<a.length;i++){
            // 數組a中下標爲i的值按位異或字符t
            a[i]=(char)(a[i]^'t');
            System.out.print(a[i]+"+");
        }
        String s=new String(a);
        return s;
    }
/**
     * 採用MD5加密解密
     * @param t4
     * @return
     */
    public static String t4(String t4){
        /**
         * MD5加碼,生成32md5碼
         */
        MessageDigest md5=null;
        try{
            md5=MessageDigest.getInstance("MD5");
        }catch (Exception e){
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[]charArray=t4.toCharArray();
        byte[]byteArray=new byte[charArray.length];
        for (int i=0;i<charArray.length;i++) {
            byteArray[i] = (byte) charArray[i];
        }
        //將摘要和密碼結合
        byte[]md5Bytes=md5.digest(byteArray);
        //字符緩衝
        StringBuffer hexValue=new StringBuffer();
        //循環每個字節
        for (int i=0;i<md5Bytes.length;i++){
            // byte類型的數字要&0xff再賦值給int類型,其本質緣由就是想保持二進制補碼的一致性
            int val=((int)md5Bytes[i])&0xff;
            //0x是16進制,ff是16 它的二進制是 1111 1111,把它變成16進制前面直接補位,加6*4個0
             if (val<16){
                 // 將不足16進制的地方補上0
                hexValue.append("0");
            }
            // 將16進制添加到字符緩衝
            hexValue.append(Integer.toHexString(val));
        }
        //將字符緩衝轉換成字符串類型
        return hexValue.toString();
    }
相關文章
相關標籤/搜索