一つの記事では、簡単にJavaで開発の暗号化方式の4種類を理解することができます!

まず、ツール

1. MD5暗号化ツール

パッケージ加密Tester.util。
インポートjava.security.MessageDigestの、パブリッククラスMD5Utils { 

    プライベート静的最終的な文字列hexDigIts [] = { "0"、 "1"、 "2"、 "3"、 "4"、 "5"、 "6"、 "7 」、 "8"、 "9"、 "A"、 "B"、 "C"、 "D"、 "E"、 "F"}。

    / ** * MD5加密* @param原点字符* @paramたcharsetName编码* @return * / 
    パブリック静的な文字列MD5Encode(文字列原点、ストリングたcharsetName){ 
        文字列resultString = NULL; 
        試す{ 
            resultString =新しい文字列(原点); 
            するMessageDigest MD = MessageDigest.getInstance( "MD5")。
            (ヌル==たcharsetName || ""の場合。
                等しい(たcharsetName)){ resultString = byteArrayToHexString(md.digest(resultString.getBytes()))。
            }他{
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(たcharsetName)))。
            } 
        }キャッチ(例外e){ 
        } 
        戻りresultString。
    } 


    公共の静的な文字列byteArrayToHexString(バイトB []){ 
        StringBufferのresultSb =新規のStringBuffer(); 
        以下のために(; iはてb.lengthを<; I = 0 int型私は++){ 
            resultSb.append(byteToHexString(B [I]))。
        } 
        )(resultSb.toString返します。
    } 

    公共の静的な文字列byteToHexString(バイトB){ 
        int型N = B。
        IF(N <0){ 
            N + = 256。
        } 
        INT D1 = N / 16。
        D2 INT = N%16。
        hexDigIts [D1] + hexDigIts [D2]を返します。
    } 
 }

2. base64で暗号化ツール

パッケージ加密Tester.util。
輸入org.apache.commons.codec.binary.Base64;輸入java.io.UnsupportedEncodingException。
パブリッククラスBase64Util { 

    //字符串编码プライベート静的最終文字列UTF_8 = "UTF-8"; 

    / ** *加密字符串* @param引数inputData * @return * / 
    パブリック静的な文字列decodeData(文字列引数inputData){ 
        しようと{ 
            場合(ヌル==引数inputData){ 
                リターンNULL; 
            } 
            新しいString(Base64.decodeBase64(inputData.getBytes(UTF_8))、UTF_8)を返します。
        }キャッチ(にUnsupportedEncodingException電子){ 
       } 
        戻りヌル。
    }

    / * **暗号化された文字列を復号引数inputData * @param @return * * / 
    パブリック静的な文字列encodeData(文字列引数inputData){ 
        試み{ 
            IF(引数inputData == nullの){ 
                リターンNULL; 
            } 
            (Base64.encodeBase64(新しい新しいStringを返しますinputData.getBytes(UTF_8))、UTF_8); 
        }キャッチ(にUnsupportedEncodingException E){ 
        } 
        の戻りはnull; 
    } 

    公共の静的な無効メイン(文字列[] args){ 
        System.out.printlnは(Base64Util.encodeData( "私は中国人です") ); 
        文字列ENSTR = Base64Util.encodeData( "私は中国人だ"); 
        System.out.printlnは(Base64Util.decodeData(ENSTR)); 
    } 
 }

3. bcryptのツール

パッケージ加密Tester.util;輸入java.util.HashMapを、輸入java.util.Map;輸入org.apache.commons.lang3.StringUtils;輸入org.mindrot.bcrypt.BCrypt;パブリッククラスBcryptCipher { 
	//塩の種がプライベート生成静的最終int型SALT_SEED = 12。
	// =「$ 2A $ 12」塩プライベート静的最終文字列SALT_STARTSWITH FOヘッド。
	
	= "塩"のpublic static final String型のSALT_KEY。
	
	= "暗号"のpublic static final String型のCIPHER_KEY。
	
	/ ** * bcryptの暗号化アルゴリズム方式* @param encryptSource  
	 *文字列を暗号化する必要があるマップ@return、マップ内の2つの値は、塩及び暗号* / 
	パブリック静的地図<文字列、文字列> bcryptの(最終的な文字列encryptSource){  
		文字列塩= BCrypt.gensalt(SALT_SEED)。
		地図<文字列、文字列> bcryptResult = bcryptの(塩、encryptSource)。
		bcryptResultを返します。
	} 
	/ ** *  
	 * @param塩暗号塩、規則に適合しなければならない  
	 * @param encryptSource * @return * / 
	パブリック静的地図<文字列、文字列> bcryptの(最終的な文字列塩、最終的な文字列encryptSource){ 
		(StringUtils.isBlank場合(encryptSource))は{ 
			( "bcryptの暗号入力のparamsを空にすることはできません")新規のRuntimeExceptionを投げます。
		} 
		
		IF(StringUtils.isBlank(塩)|| salt.length()= 29!){ 
			新規のRuntimeExceptionを投げる( "塩は空にできず、長さは29でなければなりません")。
		}  
		{(!salt.startsWith(SALT_STARTSWITH))なら
			新しいRuntimeExceptionをスロー( "無効な塩のバージョンを、塩のバージョンが$ 2A $ 12であり"); 
		} 
		
		文字列の暗号= BCrypt.hashpw(encryptSource、塩)。
		地図<文字列、文字列> bcryptResult =新しいHashMapの<文字列、文字列>(); 
		bcryptResult.put(SALT_KEY、塩)。
		bcryptResult.put(CIPHER_KEY、暗号化)。
		bcryptResultを返します。
	} 
}

第二に、暗号化テスト

1. MD5暗号化テスト

パッケージの暗号化テスター; 
インポート暗号化Tester.util.MD5Utils; 
/ * ** MD5暗号化* / 
publicクラスMD5Test { 
	公共の静的な無効メイン(文字列[] args){ 
		文字列= "I単語"; 
		文字列byteArrayToHexString = MD5Utils。 byteArrayToHexString(するString.getBytes()); 
		のSystem.out.println(byteArrayToHexString); // e68891e698afe4b880e58fa5e8af9d 
	} 
}

2. base64で暗号化テスト

パッケージの暗号化テスター; 
インポートjava.util.Base64; 
インポート暗号化Tester.util.Base64Util; 
/ Base64で暗号化** * * / 
publicクラスBast64Tester { 
	
	公共の静的な無効メイン(文字列[] args){ 
		文字列は=「文字Iであります文字列「; 
		文字列encodeData Base64Util.encodeData =(文字列);  
		//暗号化		 
		文字列decodeData = Base64Util.decodeData(encodeData);  
		//復号化		 
		するSystem.out.println(encodeData); 
		// 5oiR5piv5LiA5Liq5a2X56ym5Liy		 
		するSystem.out.println(decodeData)。
		//私は、文字列です
	} 
}

3. SHA暗号化テスト

パッケージ加密テスター。
輸入org.apache.commons.codec.digest.Sha2Crypt; 
/ ** * SHA加密* / publicクラスShaTest { 
	
	パブリック静的無効メイン(文字列[] args){ 
		文字列= "我是一句话"。		
		ストリングsha256Crypt = Sha2Crypt.sha256Crypt(するString.getBytes())。
		System.out.println(sha256Crypt); // $ 5 $ AFoQTeyt $ TiqmobvcQXjXaAQMYosAAO4KI8LfigZMGHzq.Dlp4NC 
	} 
}

4. bcryptの暗号化テスト

パッケージ加密テスター。
インポートにjava.security.SecureRandom; 
輸入java.util.Map; 
輸入java.util.UUID。
輸入加密Tester.util.BcryptCipher。
輸入加密Tester.util.MD5Utils。
/ ** * bcryptの加密* / publicクラスBCryptTest { 

	パブリック静的無効メイン(文字列[] args){ 
		
		文字列= "我是一句话"。
		地図<文字列、文字列> bcryptの= BcryptCipher.Bcrypt(文字列); 
		System.out.println(bcrypt.keySet())。// [暗号、塩]		 
		のSystem.out.println(bcrypt.get( "暗号化"))。//$2a$12$ylb92Z84gqlrSfzIztlCV.dK0xNbw.pOv3UwXXA76llOsNRTJsE/。		
		System.out.println(bcrypt.get( "塩")); // $ 2A $ 12 $ ylb92Z84gqlrSfzIztlCV。		
		地図<文字列、文字列> bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get( "塩")、
		System.out.println(bcrypt2.get( "SALT_KEY")); //ヌル		 
		するSystem.out.println(bcrypt2.get( "CIPHER_KEY")); //ヌル	 
	} 
}


おすすめ

転載: blog.51cto.com/14453419/2422450