Sample code for 30+ languages & platforms
Android™

RSA Encrypt String to Encoded Result and Reverse

See more RSA Examples

Demonstrates how to RSA encrypt a string to a base64 encoded result, and the reverse.

Chilkat Android™ Downloads

Android™
// Important: Don't forget to include the call to System.loadLibrary
// as shown at the bottom of this code sample.
package com.test;

import android.app.Activity;
import com.chilkatsoft.*;

import android.widget.TextView;
import android.os.Bundle;

public class SimpleActivity extends Activity {

  private static final String TAG = "Chilkat";

  // Called when the activity is first created.
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    boolean success = false;

    // The RSA public key is used for encryption, and the private key for decryption.

    // The public key's role is to make encryption accessible to anyone while ensuring that
    // only the private key holder can decrypt the messages.
    // The public key is designed to be widely distributed so anyone can use it to encrypt messages
    // intended for the owner of the private key.

    // Load our 2048-bit RSA public key.
    CkPublicKey pubKey = new CkPublicKey();
    // In all Chilkat methods expecting a path, you pass either absolute or relative paths.
    success = pubKey.LoadFromFile("rsaKeys/myTestRsaPublic.pem");
    if (success == false) {
        Log.i(TAG, pubKey.lastErrorText());
        return;
        }

    CkRsa rsa = new CkRsa();

    // Tell RSA to use the public key.
    rsa.UsePublicKey(pubKey);

    // RSA encryption is for small amounts of data, on the order of 200 bytes or less.
    // The maximum number of bytes that can be RSA encrypted depends
    // on the RSA key size and padding scheme (OAEP padding vs PKCS#1 v1.5 padding).
    // For specific limits, see: RSA Encryption Maximum Number of Bytes

    // Encrypt the utf-8 byte representation of the string.
    rsa.put_Charset("utf-8");
    rsa.put_EncodingMode("base64");

    // Be Careful when Using non-us-ascii String Literals in Source Code
    String encryptedB64 = rsa.encryptStringENC("Élève français dîne à côté d’un café où l’on sert déjà du gâteau au chocolat et des éclairs délicieux",false);

    // ------------------------------------------------------------------------------------------------------------------------
    // Let's decrypt, which requires the matching private key...

    // Load the matching 2048-bit RSA private key.
    CkPrivateKey privKey = new CkPrivateKey();
    String password = "secret";
    success = privKey.LoadAnyFormatFile("rsaKeys/myTestRsaPrivate.pem",password);
    if (success == false) {
        Log.i(TAG, privKey.lastErrorText());
        return;
        }

    // Tell the RSA object to use the private key.
    rsa.UsePrivateKey(privKey);

    // Indicate that after decrypting the resultant decrypted bytes contains the utf-8 byte representation of the text.
    rsa.put_Charset("utf-8");
    rsa.put_EncodingMode("base64");
    String originalText = rsa.decryptStringENC(encryptedB64,true);
    if (success == false) {
        Log.i(TAG, rsa.lastErrorText());
        return;
        }

    Log.i(TAG, "Original text = " + originalText);
    Log.i(TAG, "Success.");

  }

  static {
      System.loadLibrary("chilkat");

      // Note: If the incorrect library name is passed to System.loadLibrary,
      // then you will see the following error message at application startup:
      //"The application <your-application-name> has stopped unexpectedly. Please try again."
  }
}