2010-04-06 17 views
7

Tester RSA pour crypter une clé AES, I realized que RSA a seulement 1 bloc avec une taille limitée (réglable par le programmeur) stocke la clé cryptée. La question est, quand j'utiliser:Taille de clé AES en Java

KeyGenerator.getInstance("AES").generateKey() 

les clés AES auront une taille constante dans tous les ordinateurs et la mise en œuvre jvm?

Répondre

11

Il existe une méthode init dans KeyGenerator qui vous permet de spécifier le nombre de bits.

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); 
keyGenerator.init(128); 
SecretKey key = keyGenerator.generateKey(); 

Est-ce que faire ce dont vous avez besoin?

La valeur par défaut appears pour être 128 bits, mais je ne voudrais pas supposer que l'utilisation de toutes les JVM même défaut, ou que ce sera toujours la valeur par défaut.

+0

Je suis d'accord sur ne pas en fonction de la valeur par défaut. (D'autres valeurs par défaut de Java changent au fil du temps.) De plus, il vaut la peine de noter que les seules valeurs valides sont 128, 192 ou 256 bits pour '.init()', et que 192 et 256 pourraient ne pas être disponibles ... pourrait conduire à un plaisir de déploiement douloureux. –

2

Suns Java Cryptography Extension documentation indique que plusieurs tailles de clé sont prises en charge pour les clés AES et ne fournit aucune information sur la taille par défaut.

La taille maximale des clés peut également varier en fonction des fichiers juridictionnels utilisés par les différentes versions de Suns JVM.

+0

cela est mauvais .. donc je ne peux pas définir une taille et de croire qu'il fonctionnera bien partout .. –

+0

la taille peut également être limitée en fonction des paramètres juridictionnels. – BenM

+0

il semble que l'AES peut être toujours 128 bits (16 octets) –

0

KeyGenerator a plusieurs méthodes init(); vous devriez appeler l'un d'entre eux avant de générer une clé. Le Javadoc pour KeyGenerator spécifie que si vous n'appelez pas l'une des méthodes init(), alors "chaque fournisseur doit fournir (et documenter) une initialisation par défaut".

Il s'agit donc d'un fournisseur spécifique. Puisque vous initialisez le générateur de clé avec le nom d'algorithme "AES", on peut supposer que vous obtiendrez une clé de taille appropriée pour AES, c'est-à-dire 128, 192 ou 256 bits (respectivement 16, 24 et 32 ​​octets). Mais celui que vous obtenez dépend du fournisseur réel, qui peut dépendre de la JVM et éventuellement de sa configuration.

0

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html

Chaque mise en œuvre de la plate-forme Java est nécessaire pour soutenir les transformations Cipher standard suivantes avec les entre parenthèses tailles de clés:

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)