在Android中使用base64编码的公钥对RSA进行encryption

如何使用base-64编码的公钥对字节数组进行RSAencryption?

在阅读了一些关于如何在Java中进行RSAencryption的文章(谷歌search)之后,find了下面的代码片断

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; } 

我有公钥作为base64编码的string(126个字符),我如何使用编码的string创build'PublicKey',并使用密码。

Solutions Collecting From Web of "在Android中使用base64编码的公钥对RSA进行encryption"

您的base64string可能是X509EncodedKeySpec。 我只能猜测。 如果是这样,你应该base64解码string以获得一个byte [] 。 然后从这个byte []构造一个X509EncodedKeySpec 。 然后创build一个RSA KeyFactory的实例,并使用此KeyFactory的generatePublic()方法获得一个PublicKey 。 这个公钥然后可以传递给Cipher.init()

注意:要执行base64解码,请使用apache commons编解码器或harder base64解码器 。

更新2017年3月8日:在比迟迟没有消息更新的情况下,Java 8现在包含一个Base64编码/解码类java.util.Base64

这是如何可以生成公钥和私钥对下面是将它们存储在硬分区上的function

 enter code here public static void GenerateKeyPair() { try{ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); KeyPair kp = kpg.genKeyPair(); KeyFactory fact = KeyFactory.getInstance("RSA"); RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(), RSAPublicKeySpec.class); RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(), RSAPrivateKeySpec.class); saveToFile("public.key", pub.getModulus(), pub.getPublicExponent()); saveToFile("private.key", priv.getModulus(), priv.getPrivateExponent()); }catch(Exception e){ System.out.println(e.getMessage()); } } public static void saveToFile(String fileName, BigInteger mod, BigInteger exp) throws Exception { ObjectOutputStream oout = new ObjectOutputStream( new BufferedOutputStream(new FileOutputStream(fileName))); try { oout.writeObject(mod); oout.writeObject(exp); } catch (Exception e) { throw new Exception("error", e); } finally { oout.close(); } }