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
或使用联机解码器,如