DataFlex
DataFlex
RSA-OAEP with SHA256 hashing
See more RSA Examples
RSA encrypt a SHA256 hash with OAEP padding.Chilkat DataFlex Downloads
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