How to do RSA encryption of byte array with base-64 encoded public key?
After reading the couple of articles( of google search ) on how to do RSA encryption in Java, found the following snippet
public byte[] rsaEncrypt(byte[] data) {
PublicKey pubKey = readKeyFromFile("/public.key");
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(src);
return cipherData;
}
I have public key as a base64 encoded string (126 characters), How do i create 'PublicKey' with the encoded string and use it with Cipher.
Best Answer
Your base64 string is possibly an X509EncodedKeySpec. I can only guess. If so, you should base64 decode the string to obtain a
byte []
. Then construct anX509EncodedKeySpec
from thisbyte []
. Then create an instance of an RSAKeyFactory
, and use thegeneratePublic()
method of this KeyFactory to obtain aPublicKey
. This public key can then be passed toCipher.init()
.Note: to perform base64 decoding use either the apache commons codec, or the Harder base64 decoder.
UPDATE March 8, 2017: In better-late-than-never news, Java 8 now includes a Base64 encoding/decoding class,
java.util.Base64