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

Joã*_*ues 4 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);
Run Code Online (Sandbox Code Playgroud)

我的输出值是294. RSA 2048输出不应该是256字节长吗?

Maa*_*wes 6

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

如果要提取密钥大小,请((RSAPublicKey) publicKey).getModulus().bitLength()改用.要看看结构,用途openssl asn1parse或使用在线解码器,如.