SecretKey
).Passage d’un algorithme de chiffrement de messages de taille fixée à un chiffrement de flux.
SecureRandom
)
Celui à NE PAS utiliser : ECB (electronic codebook)
Le mode PCBC (propagating cipher bloc chaining)
Le mode CTR (counter mode)
Images: source wikipedia.
En ce moment, le mode le plus « à la mode » est GCM, (Gallois counter mode)
Certains mode nécessite que la taille du message soit multiple de la taille des blocs :
Instantiation du Cipher
String method = "
Algo/
BlocMode/
Padding";
- Padding vaut `NoPadding`quand le padding n'est pas nécessaire
- Par exemple : `AES/GCM/NoPadding`
Cipher cipher = Cipher.getInstance(method);
Instantiation du conteneur d’IV
IvParameterSpec spec = new IvParameterSpec(
le tableau);
- La taille de l'IV dépend du protocole, pour AES, égal à la taille de la clef
- Pour GCM, il faut aussi la taille de tag d'authentification
GCMParameterSpec spec = new GCMParameterSpec(
la taille,
le tableau);
Initialisation du chiffreur
cipher.init(Cipher.ENCRYPT_MODE,
clef, spec, random);
ou du déchiffreur
cipher.init(Cipher.DECRYPT_MODE,
clef, spec, random);
Le chiffrement ou déchiffrement s’effectue par une suite d’appel à l’une des méthode update
terminé par un appel à doFinal
Il est aussi possible d’authentifier des données transmises en clair avec updateAAD
pour certains algorithmes (c’est le cas de AES/GCM).
Écrire une programme qui chiffre et déchiffre un fichiers en AES256/GCM. La clef sera générée à partir d’un mot de passe et du protocole PBKDF#2 utilisant l’une des fonctions SHA.