代码之家  ›  专栏  ›  技术社区  ›  Student

为什么生成的密钥大小不是常量?[复制品]

  •  1
  • Student  · 技术社区  · 16 年前

    这个问题已经有了答案:

    以下代码在每次运行时随机打印634635636。为什么它不是常数?

    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 回复  |  直到 16 年前
        1
  •  4
  •   ZZ Coder    16 年前

    正如我在其他文章中解释的那样, getEncoded() 返回一个DER编码的ASN.1对象。在BER和DER编码中,整数是用可变的八进制数编码的。误码率和误码率的主要区别在于误码率要求最短的编码。

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