PureBasic Requires Chilkat v11.0.0+
PureBasic
Encrypt with Chilkat, Decrypt with OpenSSL
See more OpenSSL Examples
Demonstrates how to RSA encrypt a string using Chilkat, and then shows the corresponding OpenSSL command to RSA decrypt. The OpenSSL command to decrypt is as follows:openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt
Chilkat PureBasic Downloads
IncludeFile "CkFileAccess.pb"
IncludeFile "CkPublicKey.pb"
IncludeFile "CkRsa.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
rsa.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Note: RSA encryption uses the public key.
; RSA decryption uses the private key.
; The reason is that the public key can be freely provided to anybody. This allows anybody
; to send an encrypted message to the private key owner, and only the private key owner
; can decrypt.
key.i = CkPublicKey::ckCreate()
If key.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Load an RSA public key from a PEM file:
success = CkPublicKey::ckLoadFromFile(key,"qa_data/pem/VP_Public.pem")
If success = 0
Debug CkPublicKey::ckLastErrorText(key)
CkRsa::ckDispose(rsa)
CkPublicKey::ckDispose(key)
ProcedureReturn
EndIf
; Load the public key into the RSA object.
success = CkRsa::ckUsePublicKey(rsa,key)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkRsa::ckDispose(rsa)
CkPublicKey::ckDispose(key)
ProcedureReturn
EndIf
strToEncrypt.s = "00000000;XYZ2-3BHQ-ABCD-MMVV;6MY1-GHJK-9LRR;0"
; The LittleEndian property is 0 by default, but it is set here
; anyway to show that LittleEndian byte ordering is required for OpenSSL compatibility.
CkRsa::setCkLittleEndian(rsa, 0)
usePrivateKey.i = 0
ERROR - PureBasic is an array language
encryptedBytes = CkRsa::ckEncryptString(rsa,strToEncrypt,usePrivateKey)
If CkRsa::ckLastMethodSuccess(rsa) = 0
Debug CkRsa::ckLastErrorText(rsa)
CkRsa::ckDispose(rsa)
CkPublicKey::ckDispose(key)
ProcedureReturn
EndIf
; The OpenSSL command to decrypt would be this:
; openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt
fac.i = CkFileAccess::ckCreate()
If fac.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkFileAccess::ckWriteEntireFile(fac,"qa_output/rsa_encrypted.bin",encryptedBytes)
If success = 0
Debug CkFileAccess::ckLastErrorText(fac)
CkRsa::ckDispose(rsa)
CkPublicKey::ckDispose(key)
CkFileAccess::ckDispose(fac)
ProcedureReturn
EndIf
Debug "RSA Encryption Succeeded."
CkRsa::ckDispose(rsa)
CkPublicKey::ckDispose(key)
CkFileAccess::ckDispose(fac)
ProcedureReturn
EndProcedure