Java RSA-OAEP生成密钥对

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

我正在尝试与需要发送密钥大小为2048的RSA-OAEP SHA-256公钥的外部系统接口。 我得到一个错误,密钥的位长度错误:“2350”。 我使用生成的KP尝试了在线加密/解密服务,它们似乎接受密钥。我做错了什么

    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
输出的有符号表示中始终有一个额外的符号字节)。