2010-06-01 10 views
1

Le code suivant imprime au hasard 634, 635, 636, chaque fois que je l'exécute. Pourquoi ce n'est pas constant?Pourquoi la taille de clé générée n'est pas constante?

public static void main(String[] args) throws Exception { 
    KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC"); 
    keyPairGen.initialize(1024); 
    RsaKeyPair keyPair = new RsaKeyPair(keyPairGen.generateKeyPair()); 
    System.out.println(keyPair.getPrivate().getEncoded().length); 
} 

Répondre

4

Comme je l'ai expliqué dans d'autres fils, getEncoded() retourne un objet ASN.1 codé DER. En codage BER et DER, les entiers sont codés avec un nombre variable d'octets. La principale différence entre DER et BER est que DER exige un codage le plus court.

Il existe plusieurs nombres premiers dans l'objet RSAPrivateKey et ils peuvent ne pas occuper le plein 1024 bits et provoquer la différence de taille dans le codage DER.