6

http://www.ravenblast.com/index.php/blog/android-password-text-encryption/からこのコードを取得しました。機能しますが、十分に安全ではないという疑いが高まっています。他の情報源によると必要と思われる初期化ベクトルはありません。

public static String encrypt(String toEncrypt, byte[ ] key) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[ ] encryptedBytes = cipher.doFinal(toEncrypt.getBytes());
    String encrypted = Base64.encodeBytes(encryptedBytes);
    return encrypted;
}

public static String decrypt(String encryptedText, byte[ ] key) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    byte[] toDecrypt = Base64.decode(encryptedText);
    byte[] encrypted = cipher.doFinal(toDecrypt);
    return new String(encrypted);
}
4

1 に答える 1

9

はい、それはあまり安全ではありません。ブロックチェーンがないため、IVはありません。

AESアルゴリズムは、キーのサイズに関係なく、128バイトのブロックのみを暗号化できます(関係ありません)。これらのブロックがどのようにチェーンされているかは別の問題です。最も簡単なアプローチは、各ブロックを他のブロックとは別に暗号化することです(ECBモード)。私がリンクしたウィキペディアの記事では、これが安全でない時期と理由が説明されており、他の方法(つまり、CBCモード)が推奨されます。

これを行うと、 ECBモードCipher cipher = Cipher.getInstance("AES");でAES暗号が与えられます。差し迫った危険はありませんが、メッセージに繰り返しパターンがある場合、次のような状況が発生する可能性があります。

オリジナル:ここに画像の説明を入力してください暗号化:暗号化

于 2013-02-18T12:57:22.383 に答える