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

RSA Encrypt/Decrypt Bytes

See more RSA Examples

Demonstrates how to RSA encrypt and decrypt byte data.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vPubKey
    Handle hoPubKey
    Handle hoRsa
    Handle hoPrng
    Variant hoKeyBytes
    Variant hoEncBytes
    Variant vPrivKey
    Handle hoPrivKey
    String sPassword
    Variant hoDecBytes
    String sTemp1

    Move False To iSuccess

    //  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.
    Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey
    If (Not(IsComObjectCreated(hoPubKey))) Begin
        Send CreateComObject of hoPubKey
    End
    //  In all Chilkat methods expecting a path, you pass either absolute or relative paths.
    Get ComLoadFromFile Of hoPubKey "qa_data/rsaKeys/myTestRsaPublic.pem" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPubKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatRsa)) To hoRsa
    If (Not(IsComObjectCreated(hoRsa))) Begin
        Send CreateComObject of hoRsa
    End

    //  Tell RSA to use the public key.
    Get pvComObject of hoPubKey to vPubKey
    Get ComUsePublicKey Of hoRsa vPubKey To iSuccess

    //  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

    //  A typical use for RSA is to encrypt symmetric encryption keys, such as an AES key.
    Get Create (RefClass(cComChilkatPrng)) To hoPrng
    If (Not(IsComObjectCreated(hoPrng))) Begin
        Send CreateComObject of hoPrng
    End

    Get ComGenRandomBytes Of hoPrng 32 To hoKeyBytes

    Get ComEncryptBytes Of hoRsa vKeyBytes False To hoEncBytes

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

    //  Load the matching 2048-bit RSA private key.
    Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey
    If (Not(IsComObjectCreated(hoPrivKey))) Begin
        Send CreateComObject of hoPrivKey
    End
    Move "secret" To sPassword
    Get ComLoadAnyFormatFile Of hoPrivKey "qa_data/rsaKeys/myTestRsaPrivate.pem" sPassword To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPrivKey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Tell the RSA object to use the private key.
    Get pvComObject of hoPrivKey to vPrivKey
    Get ComUsePrivateKey Of hoRsa vPrivKey To iSuccess

    Get ComDecryptBytes Of hoRsa vEncBytes True To hoDecBytes
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "Success."


End_Procedure