Essais RSA à chiffrer une clé AES, je Réalisé que RSA n'a qu'un bloc avec une taille limitée (réglable par le programmeur) stocke la clé cryptée. La question est, lorsque j'utilise:
KeyGenerator.getInstance("AES").generateKey()
4 Réponses :
Suns Java Cryptography Extension de la documentation stipule que plusieurs tailles de touches sont prises en charge pour les touches AES et ne fournissent aucune information sur la taille par défaut. P>
La taille maximale des touches peut également varier en fonction des fichiers juridictionnels utilisés par différentes versions de Suns JVM. P>
C'est mauvais .. donc je ne peux pas simplement donner une taille et croire que cela fonctionnera bien partout ..
La taille peut également être limitée en fonction des paramètres juridictionnels.
On dirait que les AES peuvent toujours être toujours 128 bits (16 octets)
Il y a une méthode init dans le keygenerator qui vous permet de spécifier le nombre de bits.
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey key = keyGenerator.generateKey();
Je suis d'accord sur ne pas dépendre de la valeur par défaut. (D'autres valeurs par défaut Java changent au fil du temps.) Il convient également de noter que les seules valeurs valides sont de 128, 192 ou 256 bits pour .init () code>, et que 192 et 256 ne peuvent même pas être Disponible ... ce qui pourrait conduire à un plaisir de déploiement douloureux.
Donc, c'est spécifique au fournisseur. Étant donné que vous initialisez le générateur de clé avec le nom d'algorithme "AES", on peut supposer que vous obtiendrez une clé avec une taille adaptée à AES, c'est-à-dire 128, 192, 192 ou 256 bits (16, 24 et 32 octets, respectivement). Mais lequel vous obtenez est auprès du fournisseur actuel, qui peut dépendre de la JVM et éventuellement de sa configuration. P> keyGenerator code> a plusieurs init () code> méthodes; Vous devriez appeler l'un d'entre eux avant de générer une clé. Le Javadoc pour KeyGenerator code> Spécifie que, dans le cas où vous n'appeleriez pas l'une des méthodes init () code>, "chaque fournisseur doit fournir (et document) une initialisation par défaut." / p>
https://docs.oracle.com /javase/7/docs/aPI/javax/crypto/cipher.html
Chaque implémentation de la plate-forme Java est nécessaire pour prendre en charge les transformations de chiffrement standard suivantes avec la touche de frappe entre parenthèses: P>
AES/CBC/NoPadding (128) AES/CBC/PKCS5Padding (128) AES/ECB/NoPadding (128) AES/ECB/PKCS5Padding (128) DES/CBC/NoPadding (56) DES/CBC/PKCS5Padding (56) DES/ECB/NoPadding (56) DES/ECB/PKCS5Padding (56) DESede/CBC/NoPadding (168) DESede/CBC/PKCS5Padding (168) DESede/ECB/NoPadding (168) DESede/ECB/PKCS5Padding (168) RSA/ECB/PKCS1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)