加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:23:19 所属栏目:Java 来源:网络整理
导读:如果我这样做: 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
如果我这样做:

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字节长吗?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读