Sample code for 30+ languages & platforms
DataFlex

RSA-OAEP with SHA256 hashing

See more RSA Examples

RSA encrypt a SHA256 hash with OAEP padding.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vPubkey
    Handle hoPubkey
    Handle hoSbPem
    Boolean iBCrlf
    Handle hoJson
    Handle hoRsa
    Boolean iBUsePrivateKey
    String sEncryptedStr
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatPublicKey)) To hoPubkey
    If (Not(IsComObjectCreated(hoPubkey))) Begin
        Send CreateComObject of hoPubkey
    End

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbPem
    If (Not(IsComObjectCreated(hoSbPem))) Begin
        Send CreateComObject of hoSbPem
    End
    Move True To iBCrlf
    Get ComAppendLine Of hoSbPem "-----BEGIN PUBLIC KEY-----" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33TqqLR3eeUmDtHS89qF" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "04DDnEFGAf+kDQiNSe2ZtqC7bnIc8+KSG/qOGQIVaay4Ucr6ovDkykO5Hxn7OU7s" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "Jp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwF" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "wnxCsU5+UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUE" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "f0YN3/Q0auBkdbDR/ES2PbgKTJdkjc/rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1W" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "SwIDAQAB" iBCrlf To iSuccess
    Get ComAppendLine Of hoSbPem "-----END PUBLIC KEY-----" iBCrlf To iSuccess

    // Load the public key object from the PEM. 
    Get ComGetAsString Of hoSbPem To sTemp1
    Get ComLoadFromString Of hoPubkey sTemp1 To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoPubkey To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Build a small string to encrypt
    Get Create (RefClass(cComChilkatJsonObject)) To hoJson
    If (Not(IsComObjectCreated(hoJson))) Begin
        Send CreateComObject of hoJson
    End
    Get ComUpdateString Of hoJson "example" "123" To iSuccess
    Get ComUpdateString Of hoJson "hello" "world" To iSuccess
    Get ComEmit Of hoJson To sTemp1
    Showln sTemp1

    // This is the JSON to be RSA encrypted:  {"example":"123","hello":"world"}

    // IMPORTANT: RSA encryption is only used to encrypt small amounts of data.
    // RSA is only able to encrypt data to a maximum amount of your key size (2048 bits = 256 bytes) 
    // minus padding / header data (11 bytes for PKCS#1 v1.5 padding, 42 bytes for OAEP).
    // As a result it is often not possible to encrypt files with RSA directly. 
    // RSA is also not meant for this purpose. 
    // 
    // If you want to encrypt more data, you can use something like:
    // 1) Generate a 256-bit random keystring K
    // 2) Encrypt your data with AES-CBC with K
    // 3) Encrypt K with RSA
    // 4) Send both to the other side 

    Get Create (RefClass(cComChilkatRsa)) To hoRsa
    If (Not(IsComObjectCreated(hoRsa))) Begin
        Send CreateComObject of hoRsa
    End
    Set ComPkcsPadding Of hoRsa To False
    Set ComOaepHash Of hoRsa To "SHA-256"
    Get pvComObject of hoPubkey to vPubkey
    Get ComUsePublicKey Of hoRsa vPubkey To iSuccess
    Set ComEncodingMode Of hoRsa To "base64"

    // Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens,
    // even using the same data and key, the result will be different --  but still valid.  One should not expect
    // to get the same output.
    Move False To iBUsePrivateKey
    Get ComEmit Of hoJson To sTemp1
    Get ComEncryptStringENC Of hoRsa sTemp1 iBUsePrivateKey To sEncryptedStr
    Get ComLastMethodSuccess Of hoRsa To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoRsa To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln "Result: " sEncryptedStr


End_Procedure