为什么生成的密钥大小不恒定?

时间:2010-06-01 14:49:28

标签: java encryption rsa

以下代码在每次运行时随机打印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);
}

1 个答案:

答案 0 :(得分:4)

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

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