PureBasic
PureBasic
RSA Encrypt and Decrypt Strings
See more RSA Examples
_LANGUAGE_ sample code to RSA public-key encrypt and decrypt strings using public and private keys.Chilkat PureBasic Downloads
IncludeFile "CkPublicKey.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkRsa.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes 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
; This example also generates the public and private
; keys to be used in the RSA encryption.
; Normally, you would generate a key pair once,
; and distribute the public key to your partner.
; Anything encrypted with the public key can be
; decrypted with the private key. The reverse is
; also true: anything encrypted using the private
; key can be decrypted using the public key.
; Generate a 2048-bit key. Chilkat RSA supports
; key sizes ranging from 512 bits to 4096 bits.
privKey.i = CkPrivateKey::ckCreate()
If privKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRsa::ckGenKey(rsa,2048,privKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privKey)
ProcedureReturn
EndIf
pubKey.i = CkPublicKey::ckCreate()
If pubKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkPrivateKey::ckToPublicKey(privKey,pubKey)
plainText.s = "Encrypting and decrypting should be easy!"
; Start with a new RSA object to demonstrate that all we
; need are the keys previously exported:
rsaEncryptor.i = CkRsa::ckCreate()
If rsaEncryptor.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Encrypted output is always binary. In this case, we want
; to encode the encrypted bytes in a printable string.
; Our choices are "hex", "base64", "url", "quoted-printable".
CkRsa::setCkEncodingMode(rsaEncryptor, "hex")
; We'll encrypt with the public key and decrypt with the private
; key.
success = CkRsa::ckUsePublicKey(rsaEncryptor,pubKey)
usePrivateKey.i = 0
encryptedStr.s = CkRsa::ckEncryptStringENC(rsaEncryptor,plainText,usePrivateKey)
Debug encryptedStr
; Now decrypt:
rsaDecryptor.i = CkRsa::ckCreate()
If rsaDecryptor.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkRsa::setCkEncodingMode(rsaDecryptor, "hex")
success = CkRsa::ckUsePrivateKey(rsaDecryptor,privKey)
usePrivateKey = 1
decryptedStr.s = CkRsa::ckDecryptStringENC(rsaDecryptor,encryptedStr,usePrivateKey)
Debug decryptedStr
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privKey)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsaEncryptor)
CkRsa::ckDispose(rsaDecryptor)
ProcedureReturn
EndProcedure