ワン:AES暗号化とは何ですか
AESのAdvanced Encryption Standard(英語:高度暗号化規格、略称:AES)、また暗号ではRijndael暗号、米国連邦政府によって採用されたブロック暗号化標準として知られています。
この規格は、オリジナルのDESを置き換えるために使用されることは広く分析されており、世界中で使用マルチ。
AESは、反復暗号対称鍵パケット、使いやすいAESアルゴリズムの暗号化強度、高効率、である、実際の開発には、AESアルゴリズムを選択することをお勧めします。
2:AES暗号化は達成されアンドリュース
次のようにアンドリュースAES暗号化方式は次のとおりです。
SecretKeySpecと暗号:2つのAPIを提供していますアンドリュース
平文と暗号文、Ciperにより暗号化と復号化機能を提供
III:プロジェクト内のアプリケーションは、以下を参照します
/ ** * 2019/9/23/023 ON leilei TUAによって作成されます。 * / パブリッククラスAesUtils { 公共の静的な文字列VIPARA決勝= "1234567890123456"; 公共の静的な文字列の最後のBM = "UTF-8"; 公共の静的な文字列のパスワード決勝= "1234567890123456"; //パスワード秘密鍵生成キーワード / ** バイト配列を16進文字列を大文字に変換* * * @paramのB * @return * / プライベート静的な文字列のbyte2HexStrを(バイト[] B){ ; StringBuilderの新しい新しいSB)は(のStringBuilderを= (I = 0 int型; Iは、てb.lengthから<; I ++の)のために{ 文字列Integer.toHexString S =(B [I]&0xFFで); (s.length()== 1)IF { sb.append( "0"); } sb.append(s.toUpperCase())。 } )(sb.toStringを返します。 } / ** * 16进制字符串转字节数组 * * @param S * @return * / プライベート静的バイト[] str2ByteArray(文字列S){ int型byteArrayLength = s.length()/ 2。 バイト[] B =新しいバイト[byteArrayLength]。 以下のために(; iは<byteArrayLength; I = 0 int型私は++){ バイトB0 =(バイト)Integer.valueOfは(s.substring(私は、16)iは2 + 2 * 2 *) .intValue(); B [i]はB0を=。 } Bを返します。 } / ** * AES加密 * * @paramコンテンツ明文 * @param * @return * / パブリック静的な文字列aesEncrypt(文字列コンテンツ){ 試みる{ IvParameterSpec zeroIv =新しいIvParameterSpec(VIPARA.getBytes())。 SecretKeySpecキー=新しいSecretKeySpec(password.getBytes()、 "AES"); 暗号暗号= Cipher.getInstance( "AES / CBC / PKCS5Padding"変換)。 cipher.init(Cipher.ENCRYPT_MODE、キー、zeroIv)。 バイト[]はEncryptedData = cipher.doFinal(content.getBytes(BM))。 //新しい文字列(はEncryptedData、BM)を返します。 Base64.encode(はEncryptedData)を返します。 //はbyte2HexStr(はEncryptedData)を返します。 }キャッチ(持つNoSuchAlgorithmException電子){ e.printStackTrace(); }キャッチ(NoSuchPaddingException電子){ e.printStackTrace(); }キャッチ(にUnsupportedEncodingException電子){ e.printStackTrace(); }キャッチ(例外:InvalidKeyException電子){ e.printStackTrace(); }キャッチ(IllegalBlockSizeException電子){ e.printStackTrace(); }キャッチ(BadPaddingException電子){ e.printStackTrace(); }キャッチ(InvalidAlgorithmParameterExceptionが電子){ e.printStackTrace(); } はnullを返します。 } / ** * AES解密 * * @paramコンテンツ密文 * @paramパスワード生成秘钥的关键字 * @return * / パブリック静的な文字列aesDecrypt(文字列のコンテンツ、文字列のパスワード){ {試みる バイト[] byteMi = Base64.decode(コンテンツ)。 //バイト[] byteMi = str2ByteArray(コンテンツ)。 IvParameterSpec zeroIv =新しいIvParameterSpec(VIPARA.getBytes()); SecretKeySpecキー=新しいSecretKeySpec(password.getBytes()、 "AES"); 暗号暗号= Cipher.getInstance( "AES / CBC / PKCS5Padding"変換)。 cipher.init(Cipher.DECRYPT_MODE、キー、zeroIv)。 バイト[] decryptedData = cipher.doFinal(byteMi)。 新しいStringを返す(decryptedData、 "UTF-8"); }キャッチ(持つNoSuchAlgorithmException電子){ e.printStackTrace(); }キャッチ(NoSuchPaddingException電子){ e.printStackTrace(); }キャッチ(例外:InvalidKeyException電子){ e.printStackTrace(); }キャッチ(IllegalBlockSizeException電子){ e.printStackTrace(); }キャッチ(BadPaddingException電子){ e.printStackTrace(); }キャッチ(にUnsupportedEncodingException電子){ e.printStackTrace(); }キャッチ(InvalidAlgorithmParameterExceptionが電子){ e.printStackTrace(); } はnullを返します。 } }
注意: IOSのステージの後
VIPARA(オフセット)
パスワード(キー)は、マルチターミナル統一標準解読しなければなりませんでした
public static final String型VIPARAは= "" ; // 必要性への配慮16文字 のpublic static final String型パスワード= "" ; //パスワードキーは、秘密鍵を生成しています。注16の文字が必要です
アプリケーションプロジェクトは、JSONの送信(限りすることができますように文字列)についてです
地図<文字列、文字列>マップ=新しいHashMapの<>(); map.put( "ORDER_ID"、ORDER_ID)。 map.put( "input_password"、payWord)。 ストリングaesStr = AesUtils.aesEncrypt(JsonUtil.getInstance()toJson(マップ)。)。
Leileiトゥア