Encrypting with RSA private key in Java

后端 未结 5 643
误落风尘
误落风尘 2020-12-08 17:39

I\'m trying to encrypt some content with an RSA private key.

I\'m following this example: http://www.junkheap.net/content/public_key_encryption_java

but c

5条回答
  •  有刺的猬
    2020-12-08 18:23

    This question is pretty old, but I recently stumbled upon the problem (I'm implementing requirements of some protocol which requires encryption with private key). I will just quote the post from forum:

    I recently stumbled upon the same issue, submitted PMR 22265,49R, and IBM Support after consultation with "development" (whoever those are) ruled that private keys cannot be used for encryption. No matter how much I tried to argue with them that private keys should not be used for data protection, which is only one purpose behind encryption, and that it is perfectly fine to use private keys for encryption to achieve non-repudiation, they were unshakable in their belief. You have got to love people, who insist that 2x2=5.

    Here is how I worked around this problem: Essentially, I created a public key object with private key's crypto material. You will need to do the reverse, create a private key object with public key's crypto material, to decrypt with public key if you want to avoid the "Public key cannot be used to decrypt" exception.

    RSAPrivateCrtKey privateKey = (RSAPrivateCrtKey) ks.getKey(keyAlias, ksPassword.trim().toCharArray());
    RSAPublicKeySpec spec = new RSAPublicKeySpec(
       privateKey.getModulus(),
       privateKey.getPrivateExponent()
    );
    Key fakePublicKey = KeyFactory.getInstance("RSA").generatePublic(spec);
    encryptCipher.init(Cipher.ENCRYPT_MODE, fakePublicKey);
    

提交回复
热议问题