Java 为什么生成的密钥大小不是常数?

Java 为什么生成的密钥大小不是常数?,java,encryption,rsa,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(keyPair

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

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


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

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

RSAPrivateKey对象中有几个素数,它们可能不占用全部1024位,这将导致DER编码中的大小差异