RSA encrypt with base64 encoded public key in Android

后端 未结 2 1778
小蘑菇
小蘑菇 2021-02-02 01:57

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, fou

相关标签:
2条回答
  • 2021-02-02 02:35

    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 an X509EncodedKeySpec from this byte []. Then create an instance of an RSA KeyFactory, and use the generatePublic() method of this KeyFactory to obtain a PublicKey. This public key can then be passed to Cipher.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

    0 讨论(0)
  • 2021-02-02 02:39

    this is how you can generate Public and Private key pair below is the function to store them on hard dist

    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();
      }
    }
    
    0 讨论(0)
提交回复
热议问题