Java 为什么我的RSA 2048公钥长度为294字节?

Java 为什么我的RSA 2048公钥长度为294字节?,java,rsa,public-key,Java,Rsa,Public Key,如果我这样做: KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair kp = kpg.genKeyPair(); Key publicKey = kp.getPublic(); byte [] pubKey = publicKey.getEncoded(); System.out.println("Size: " + pubKey.length); 我的输出值是294

如果我这样做:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Key publicKey = kp.getPublic();
byte [] pubKey = publicKey.getEncoded();
System.out.println("Size: " + pubKey.length);
我的输出值是294。RSA 2048输出不应该是256字节长吗

  publicKey.getEncoded();
这将返回一个标准格式的编码密钥,并带有一些开销(如算法标识符)


如果您确实需要原始密钥材料,您可以将其转换为
RSAPublicKey
,并调用
getmodules()
getPublicExponent()
(为您提供
BigInteger
s)。

RSA密钥不包含随机字节,例如AES密钥;它由数字组成。RSA的密钥大小由模定义,但它也需要一个公共指数(通常是第四个费马数或另一个小素数)。因此,使用
getEncoded()
时,两者都会被返回并嵌入到ASN.1 DER编码的字节数组中,该数组通常存在于X5.09证书中,称为SubjectPublicKeyInfo

如果要提取密钥大小,请改用
((RSAPublicKey)publicKey).getmodules().bitLength()
。要查看该结构,请使用
openssl asn1parse
或使用联机解码器,如