2010-06-01 70 views
1

下面的代码随机打印634,635,636,每次运行它。为什么它不是恒定的?为什么生成的密钥大小不是恒定的?

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); 
} 

回答

4

正如我在其他线程所解释的,getEncoded()返回DER编码的ASN.1对象。在BER和DER编码中,整数用可变数量的八位字节编码。 DER和BER之间的主要区别在于DER需要最短的编码。

RSAPrivateKey对象中有几个素数,它们可能不占用完整的1024位,并且会导致DER编码中的大小差异。