Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

Duplicate PHP RSA Encryption

See more RSA Examples

Demonstrates how to duplicate the following PHP function.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.PublicKey;
import com.chilkatsoft.chilkat2.Rsa;
import com.chilkatsoft.chilkat2.Xml;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // Duplicate the following PHP code:
        //
        //    public function encryptRSA($plainText,$rsaMOD,$pubKEY){
        //         $rsa  = new RSA();
        //         $rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
        //         $publicKey = [
        //             'e' => new BigInteger($pubKEY,16),
        //             'n' => new BigInteger($rsaMOD,16)
        //         ];
        //
        //         $rsa->loadKey($publicKey);
        //         $ciphertext = $rsa->encrypt($plainText);
        //         return bin2hex($ciphertext);
        //     }
        //
        //     $plainText="key=abcdefghijkmnopq&iv=abcdefghijkmnopq&h=12345678&s=12345678"
        //     $rsaMOD="F0946D8F05604809E24B8CFFD30349CEA9E5F4D320BFD9E9AA1B088863F02C43E7997D37A3E27B4F8F359F1744DB6B20A437067C0D325A80660D12FF56A57673"
        //     $pubKEY="010001"

        // We have the RSA modulus in hex
        String rsaMOD = "F0946D8F05604809E24B8CFFD30349CEA9E5F4D320BFD9E9AA1B088863F02C43E7997D37A3E27B4F8F359F1744DB6B20A437067C0D325A80660D12FF56A57673";

        // The RSA exponent in hex is "010001", which is 65537 in decimal.  It's typically the exponent that is always used.
        String rsaEXP = "010001";

        // Get the RSA modulus and exponent in base64.
        BinData bdMod = new BinData();
        BinData bdExp = new BinData();
        bdMod.appendEncoded(rsaMOD, "hex");
        bdExp.appendEncoded(rsaEXP, "hex");

        // Build the XML representation of the RSA public key
        Xml xml = new Xml();
        xml.setTag("RSAPublicKey");
        xml.updateChildContent("Modulus", bdMod.getEncoded("base64"));
        xml.updateChildContent("Exponent", bdExp.getEncoded("base64"));

        // Load the RSA public key into a Chilkat public key object.
        PublicKey pubkey = new PublicKey();
        pubkey.loadFromString(xml.getXml());

        // Setup the RSA object for encryption and do it..
        Rsa rsa = new Rsa();
        rsa.setVerboseLogging(true);
        rsa.usePublicKey(pubkey);

        // Use PKCSv1.5 padding
        rsa.setPkcsPadding(true);

        // Encrypt and return the string as hex.
        rsa.setEncodingMode("hex");
        String plainText = "key=abcdefghijkmnopq&iv=abcdefghijkmnopq&h=12345678&s=12345678";
        String cipherText;
        try {
            cipherText = rsa.encryptStringENC(plainText, false);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Note: The PKCSv1_5 padding incorporates random bytes.  Therefore, the RSA encryption will produce different results each time -- all of which are valid
        // and decrypt correctly to the same original text.
        System.out.println(cipherText);
    }
}