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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |