/ / AES / CBC暗号化:パディングを追加しましたが、それでもIVエラーが発生します - Android、暗号化、暗号化、AES

AES / CBC暗号化:パディングは追加されましたが、IVエラーが発生しました - アンドロイド、暗号化、暗号化、エース

私は暗号化については非常に不慣れで、サーバーに確認する前にパスワードを暗号化することを任務としていました(私はそれが悪い習慣であることを知っていますが、従う必要があります)。これが私の暗号化方法です。

public static String encrypt(String src) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

Key key = makeKey();
AlgorithmParameterSpec iv = makeIv();

cipher.init(Cipher.ENCRYPT_MODE, key, iv);
return Base64.encodeBytes(cipher.doFinal(src.getBytes()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}

static AlgorithmParameterSpec makeIv() {
return new IvParameterSpec(ENCRYPTION_IV.getBytes(encoding));
}


static Key makeKey() {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] key = md.digest(ENCRYPTION_KEY.getBytes(encoding));
return new SecretKeySpec(key, "AES");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}

ivが13文字の文字列で構成されている場合。私はパディングを指定しましたが、なぜ私はまだ得るのですか InvalidAlgorithmParameterException: IV must be 16 bytes long. エラー?この暗号化方式を実際にどのように実装するのですか?

回答:

回答№1は1

パディングは暗号化されているデータにのみ適用されます。 ほとんどの場合、データは暗号化している暗号化ブロックよりも少し長い/短いため、最後のブロックにはパディングが必要になります。

しかしあなたのIVは16バイトである必要があり、ゼロであなたのIVを埋め込むことはそうでなければセキュリティホールになるでしょう。