DataFlex Requires Chilkat v11.0.0+
DataFlex
RSA Encrypt Bytes to Base64 and Reverse
See more RSA Examples
Demonstrates how to RSA encrypt bytes to base64 and the reverse.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vPubKey
Handle hoPubKey
Handle hoRsa
Handle hoPrng
Variant hoKeyBytes
String sEncryptedB64
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
Set ComEncodingMode Of hoRsa To "base64"
Get ComEncryptBytesENC Of hoRsa vKeyBytes False To sEncryptedB64
Showln "Result:"
Showln sEncryptedB64
// Sample output:
// hTTV4Lbmm2V7NCw/HaoJL8Aq/MM/HXblQnjitrF9HY1zBlISwui2jGVVZDtZcZ/rICOpPw44w8Qb8AswFVE1sryydmNEvcIfYAp/xgdBPXBERAS0y4AoEzUfuC5TJmJFvnFkl2lX8GAclANfcTik38V+k3EXu5wPzHKNFb07c6jnwh3Jm4f3PRUhmmB2NO5kSWqHsx0dNglOTq5BUZx34nxlXL5G8d7mXqITsUtrOHXAO/Gb7IrvB81Xk2vc5p4yHhiY/rFTHTTmZyzte2qHGm7V6xPRNURjiivnMY2jQU0Um1JKQcAiSe8Suwvd2LXP5PIhl71VLgO+fokjnynfRg==
// ------------------------------------------------------------------------------------------------------------------------
// 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 ComDecryptBytesENC Of hoRsa sEncryptedB64 True To hoDecBytes
If (iSuccess = False) Begin
Get ComLastErrorText Of hoRsa To sTemp1
Showln sTemp1
Procedure_Return
End
Showln "Success."
End_Procedure