2009-12-03 7 views
0

J'ai obtenu le corps de la méthode suivante pour générer une clé pour le chiffrement:Cryptage et Java, clé de génération de méthode - quelle taille?

new BigInteger(500, new SecureRandom()).toString(64); 

Quelqu'un pourrait-il expliquer quelle est la taille de la clé générée?

+0

devrait être: nouveau BigInteger (500, nouvelle SecureRandom()) toString (64).. –

+0

Quel algorithme de chiffrement? – Bozho

Répondre

0

C'est un nombre aléatoire sécurisé avec une longueur de 500 bits dans votre cas. Jetez un oeil à la javadoc du constructeur BigInteger (int numBits, Random rnd).

+0

En supposant que je veux la taille de clé 128 devrait-il être: nouveau BigInteger (128, nouveau SecureRandom()). ToString (32)? Quelle est la raison de l'ajout de la méthode toString? –

+0

Premier: oui. La méthode toString() convertit le nombre en String. Je choisirais 'toString (16)' pour hexadécimal ou juste 'toString()' pour les nombres décimaux dans la chaîne –

0

Votre ligne de code crée un entier de 500 bits et tente apparemment de le convertir en chaîne en Base64 - c'est l'appel toString(). Mais cela ne fonctionnera pas, car BigInteger.toString() ne fonctionne que jusqu'à la base 36 et par défaut décimal sinon. Si vous avez besoin d'une représentation Base64, vous devez utiliser une classe tierce, car il n'y a pas d'encodeur Base64 dans l'API standard.

+0

Merci pour la réponse. Qu'en est-il de celui-ci: nouveau BigInteger (128, nouveau SecureRandom()). ToString (32) <- Cela signifie-t-il qu'il génère une clé valide avec 128 bits? –

+0

Oui, bien qu'il le représentera en base 32 - ce qui n'est probablement pas ce que vous voulez. Cela dépend de l'API pour laquelle vous voulez utiliser la clé, dans quel format elle attend la clé. –

0

Normalement, vous voudriez que votre clé de cryptage ait une puissance de 2. Alors peut-être que vous voulez dire 512 bits?

+0

Il y avait une erreur, par exemple: nouveau BigInteger (256, nouveau SecureRandom()). ToString (32) - quel est le but pour ajouter "toString (32)" dans ce cas? –

0

D'abord, comme d'autres ont suggéré, vous obtiendrez IllegalArgumentException parce que BigInteger ne supporte pas radix 64.

Même si vous utilisez un radix valide, le nombre de caractères générés varie parce que les bandes BigInteger conduisant 0s et vous pourriez aussi obtenir le signe moins dans la chaîne.

Pour obtenir des clés aléatoires, utilisez simplement des octets aléatoires directement. Dites que vous voulez 128 bits (16 octets) clé AES, il suffit de faire cela,

byte[] keyBytes = new byte[16]; 
    new SecureRandom().nextBytes(keyBytes); 
    SecretKey aesKey = new SecretKeySpec(keyBytes, "AES"); 
Questions connexes