Java RSA-OAEP生成密钥对
我正在尝试与需要发送密钥大小为2048的RSA-OAEP SHA-256公钥的外部系统接口。 我得到一个错误,密钥的位长度错误:“2350”。 我使用生成的KP尝试了在线加密/解密服务,它们似乎接受密钥。我做错了什么Java RSA-OAEP生成密钥对,java,encryption,rsa,bouncycastle,Java,Encryption,Rsa,Bouncycastle,我正在尝试与需要发送密钥大小为2048的RSA-OAEP SHA-256公钥的外部系统接口。 我得到一个错误,密钥的位长度错误:“2350”。 我使用生成的KP尝试了在线加密/解密服务,它们似乎接受密钥。我做错了什么 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); SecureRandom random = new SecureRandom(); Ke
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
SecureRandom random = new SecureRandom();
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BC");
generator.initialize(2048, random);
KeyPair pair = generator.generateKeyPair();
Key pubKey = pair.getPublic();
Key privKey = pair.getPrivate();
// I am sending pubKey.getEncoded()
公钥的示例结果:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuUKRnE07rwQ8Juegbhabv1kaHOrfou8+FNHYyhjn8jUPgwumALonsvztt4goivc1Bwm6sFwCIGnxf+2y1BI1saG3w5S1R24EUAN7efi7CS4LMEhtgJtavtWYEkEZj7OaU/BLnkB1rFAmBDU3vudSd3Gupgnbqtw7VjOH6Qrfnsh3phVr6DdHruq7SftOvCyhBucOax0hwt6enRs5UjBfbgDbbSMFaFdF4jZpE4Jnfl9gwRF51QP934Il1djPT6cezuEYlD8VAklLFPR+rOL73nvBCxLdZwdBlQHO8J8XGjWaNmAMHvyisFxkD8Ud9nC7m9MPb9J6+n3cWG7OL+C97QIDAQAB
谢谢您的代码显示生成密钥和加密数据,但不显示发送任何内容。是的,它也是处理解密的代码的一部分。最后一行有注释what is sending->pubKey.getEncoded()。我们需要看看api是如何定义的。您的公钥是有效的base64格式的SPKI,这是一种非常普遍接受的格式,但也可以使用其他格式。也许他们只想要模数,并假设公共指数为65537。没有更多的信息是不可能知道的。我猜您应该只发送base64编码的模,而不是整个公钥。尝试通过base64编码
((RSAKey)pubKey).getmodule().toByteArray()
的输出来实现这一点,并查看这是否有效。@PresidentJamesK.Polk:如果他们想要base64中的2048位,请从biginger.toByteArray()中删除第一个(符号)字节。
(选择RSA moduli的目的是使其具有精确的8位倍数,因此它们在由biginger
输出的有符号表示中始终有一个额外的符号字节)。