Ne AES/SRC faut vraiment IV paramètre?

Je suis en train d'écrire une application simple pour chiffrer mon message en utilisant AES /SRC (mode). Comme je crois comprendre le mode CBC nécessite IV paramètre mais je ne sais pas pourquoi mon code fonctionne sans IV paramètre utilisé. N'importe qui peut expliquer pourquoi? Merci.

Le message chiffré imprimé: T9KdWxVZ5xStaisXn6llfg== sans exception.

public class TestAES {

public static void main(String[] args) {

    try {
        byte[] salt = new byte[8];
        new SecureRandom().nextBytes(salt);

        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
        KeySpec keySpec = new PBEKeySpec("myPassword".toCharArray(), salt, 100, 128);

        SecretKey tmp = keyFactory.generateSecret(keySpec);
        SecretKeySpec key = new SecretKeySpec(tmp.getEncoded(), "AES");

        Cipher enCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        enCipher.init(Cipher.ENCRYPT_MODE, key);

        //enCipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));

        byte[] cipherBytes = enCipher.doFinal("myMessage".getBytes());
        String cipherMsg = BaseEncoding.base64().encode(cipherBytes);

        System.out.println("Encrypted message: " + cipherMsg);

    } catch (Exception ex) {
        ex.printStackTrace();
    }

}
}
Cela fonctionne parce que le Java sélectionne aléatoirement IV. vous pouvez utiliser enCipher.getIV() après init pour voir les valeurs (et les envoya de l'autre côté).
doridori.github.io/Android-Sécurité-Méfiez-vous-de-la-défaut-IV Comme vous avez été en utilisant AES/CBC/PKCS5Padding il était probablement à l'aide de l'ancien AndroidOpenSSL mise en œuvre, qui (malheureusement) la valeur par défaut d'un [0] IV

OriginalL'auteur | 2014-01-02