当前位置: 首页 > 知识库问答 >
问题:

RSA公钥生成与加密在Java中的有效实现

呼延明朗
2023-03-14

我目前正在尝试编写一个程序,将利用公钥密码系统,如RSA或ElGamal。我一直在查看不同的来源,我得到的最接近的是Bouncy Castle的公钥加密FIPS文档,其中RSA的示例代码有点简单:

public byte[] pkcs1Encrypt(RSAPublicKey pubKey, byte[] data) {    
   Cipher c = Cipher.getInstance(“RSA/NONE/PKCS1Padding”, “BCFIPS”);
   c.init(Cipher.ENCRYPT_MODE, pubKey);
   return c.doFinal(data);
} 

我经常使用对称密钥加密系统,如AES和Triple-DES(DESede),但我查看了Bouncy Castle文档,发现RSAPublickey不是SecretKey类的子接口/类。

是否有任何方法生成这个RSAPublickey对象,或者是否有更有效的方法使用Bouncy Castle或JCE实现这种加密

共有1个答案

长孙鸿
2023-03-14

bouncycastle文档不清楚。cipher.init(cipher.encrypt_mode,pubKey);需要java.security.interfaces.rsapublickey的实例,而不是org.bouncycastle.asn1.pkcs.rsapublickey

您可以从DER编码的数据中使用模数和指数构建RSAPublickey,也可以生成一个新的密钥对

//RSA public key from DER encoded data
byte publicKeyData[] = ...;
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyData);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey publicKey = kf.generatePublic(keySpec );

//RSA from modulus and exponent
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey publicKey = kf.generatePublic(keySpec);

//Generate a key pair using a secure random algorithm
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(2048, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
byte publicKeyData[] = publicKey.getEncoded();
 类似资料:
  • 我用PHP OpenSSL生成了一个SSH密钥: 这导致$pem如下所示: 但是我无法使用此密钥进行身份验证。在使用它之前,我必须使用以下命令转换它: 转换的结果如下: 两者都是PEM格式,但第二个是RSA私钥。使用第二个,PHP可以登录。所以我需要一个以开头的密钥,而不仅仅是。如何使用PHP和OpenSSL PHP实现创建它?

  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 说明 微信支付-获取RSA加密公钥SDK,企业付款到银行卡接口需要。 你还需要执行openssl rsa -RSAPublicKey_in -in weixin-rsa-public.pem -pubout 将命令行输出的证书内容覆盖到weixin-rsa-public.pem文件中才可使用 官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch

  • 并且我将这个函数称为用RSA公钥加密DSA密钥的函数:

  • 我知道可以使用此链接为OpenSSL中的自签名证书生成一个公钥和一个私钥。但是对于给定的公钥,我有没有可能算出对应的私钥呢?我一直在使用1024位的RSA公钥。

  • 我有一个服务器和一个客户端。 客户端可能采用不同的技术,如java、PHP。 服务器代码是用java编写的。 我在服务器中所做的是,获取客户端公钥的指数和模字节,并生成客户端的公钥。要生成客户端公钥,我使用以下代码: 若要使用客户端公钥加密数据,我使用以下代码: 服务器信息 我已经实现了RSA-1024来加密AES密钥。我正在使用RSA/ECB/PKCS1Padding算法。并且我还确保所有客户端