AESの暗号化と復号化コード

com.huizhuyun.jeemis.api.openAPI.serviceをパッケージ化。

輸入org.slf4j.Logger;
輸入org.slf4j.LoggerFactory。
輸入javax.crypto.Cipher;
輸入javax.crypto.spec.IvParameterSpec;
インポートするjavax.crypto.spec.SecretKeySpec;

輸入java.util.Base64;
インポートのjava.util.Collection;
輸入java.util.HashMapを;
輸入java.util.Map;

輸入静的java.util.Base64 *。

/ **
* AES加密解密
* /
publicクラスAesMethodOpenService {
プライベート静的最終ロガーロガー= LoggerFactory.getLogger(AesMethodOpenService.class)。
プライベート静的最終文字列エンコーディング=「GBK」。
プライベート静的最後の文字列KEY_ALGORITHM =「AES」。
最終的な静的デコーダBase64.Decoder =プライベートBase64.getDecoder();
プライベート静的Base64.getEncoder =最終Base64.Encoderエンコーダ();
/ **
*暗号化と復号化アルゴリズム/作業モード/塗りつぶしモード
* /
プライベート静的な文字列DEFAUIT_CIPHER_ALGORITHM =決勝" AES / CBC / PKCS5Padding "変換;
/ **
*フィルベクトル
* /
民間最終静的な文字列FILL_VECTOR =" 1234560405060708「;


/ **
*暗号化
*
* @param SSRC暗号化文字列の前に
* @paramのsKey暗号KEY
* @return
*例外@throws
* @author yinning
* /
パブリック静的な文字列を暗号化(SSRC文字列、文字列のsKey)が例外をスロー{
IF(のsKey == NULL){
System.out.print( "キーブランクヌル")を、
戻りNULL;
}
//は16ビットの鍵か否かを判断する
IF {(!sKey.length()= 16)
のSystem.outを。プリント( "キー長が16ではない");
戻りNULL;
}
バイト[] = sKey.getBytes RAW( "UTF-8");
SecretKeySpec skeySpec =新しい新しいSecretKeySpec(RAW、 "AES");
暗号暗号= Cipher.getInstance (DEFAUIT_CIPHER_ALGORITHM); // "アルゴリズム/モード/マナー補数"
IvParameterSpec IV =新新IvParameterSpec(sKey.getBytes()); // CBCモードではIVベクトルを必要とし、暗号化アルゴリズムの強度増加
cipher.init(暗号を.ENCRYPT_MODE、skeySpec、IV);
バイト[] = ENCRYPTED Cipher.doFinal(sSrc.getBytes())。
Encoder.encodeToString encodedText =文字列(暗号化);
リターンencodedText; // BASE64は、トランスコーディング、本明細書中で使用されるか、および暗号化は、二次的な役割を再生することができます。

}

/ **
*復号
*
* @param SSRCは、文字列の前に解読
* @paramのsKey復号鍵
* @return
* @throws例外
* @author yinning
* /
パブリック静的文字列解読(SSRC文字、文字列のsKey){
試み{
/ /キーか否かを判断する正しい
場合には(のsKey == NULL){
System.out.print( "キーブランクヌル")の、
戻りNULL;
}
//を決定する16ビットの鍵か
IF(!sKey.length()= 16 ) {
System.out.print( "キー长度不是16位");
ヌルを返します。
}
バイト[] =生のsKey.getBytes( "UTF-8");
SecretKeySpec skeySpec =新しいSecretKeySpec(生、 "AES");
暗号暗号= Cipher.getInstance(DEFAUIT_CIPHER_ALGORITHM)。
IvParameterSpec IV =新しいIvParameterSpec(sKey.getBytes());
cipher.init(Cipher.DECRYPT_MODE、skeySpec、IV)。
バイト[] encrypted1 = decoder.decode(SSRC); //先用BASE64解密
試みる{
バイト[] =オリジナルcipher.doFinal(encrypted1)。
ストリングoriginalStringは、新しい文字列(オリジナル)を=。
originalStringを返します。
キャッチ}(例外E){
のSystem.out.println()(e.toString);
戻りNULL;
}
}キャッチ(例外EX){
のSystem.out.println()(ex.ToString);
戻りNULL;
}
}

公共ボイドメイン静的(文字列[]引数)は例外{スロー

文字列CKEY = "9230967890982316"を、
文字列に暗号化される//ニーズ
ストリングたcSrc = "211421188811111212"を;
のSystem.out.println(たcSrc);
//暗号化
長いLSTART =システム。 ;にcurrentTimeMillis()を持つ
文字列=暗号化(のcSrc、CKEY)をenString;
のSystem.out.println( "暗号化された文字列" + enString)。

lUseTime =にSystem.currentTimeMillisロング() - LSTART;
System.out.printlnは( "加工暗号化:" + lUseTime + "ミリ秒");
LSTART =にSystem.currentTimeMillis();
文字列=解読をDeString(enString、CKEY);
システム.out.println( "復号化された文字列がある:" + DeString);
lUseTime =のSystem.currentTimeMillis() - LSTART;
のSystem.out.println( "処理解読:" + lUseTime + "秒");

}
}

おすすめ

転載: www.cnblogs.com/fengfeng21/p/12154665.html