PureBasic
PureBasic
RSA Encrypt and Decrypt Credit Card Numbers
See more RSA Examples
_LANGUAGE_ sample code to RSA public-key encrypt and decrypt credit card numbers. The RSA key is loaded from an unencrypted PKCS8 file. Chilkat provides many ways of setting the key -- loading from both encrypted and unencrypted PEM, PKCS8, DER, PVK, etc. Keys may be loaded from files or in-memory representations. (The RSA component also provides the ability to generate RSA 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
privKey.i = CkPrivateKey::ckCreate()
If privKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Load an RSA private key from a file:
success = CkPrivateKey::ckLoadAnyFormatFile(privKey,"rsaPrivateKey.key","")
If success = 0
Debug CkPrivateKey::ckLastErrorText(privKey)
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privKey)
ProcedureReturn
EndIf
; Get the public part of the private key.
pubKey.i = CkPublicKey::ckCreate()
If pubKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkPrivateKey::ckToPublicKey(privKey,pubKey)
success = CkRsa::ckUsePublicKey(rsa,pubKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privKey)
CkPublicKey::ckDispose(pubKey)
ProcedureReturn
EndIf
; Encrypt a VISA credit card number:
; 1234-5678-0000-9999
ccNumber.s = "1234567800009999"
usePrivateKey.i = 0
CkRsa::setCkEncodingMode(rsa, "base64")
encryptedStr.s = CkRsa::ckEncryptStringENC(rsa,ccNumber,usePrivateKey)
Debug "Encrypted:"
Debug encryptedStr
; Now decrypt:
rsaDecryptor.i = CkRsa::ckCreate()
If rsaDecryptor.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkRsa::setCkEncodingMode(rsaDecryptor, "base64")
CkRsa::ckUsePrivateKey(rsaDecryptor,privKey)
usePrivateKey = 1
decryptedStr.s = CkRsa::ckDecryptStringENC(rsaDecryptor,encryptedStr,usePrivateKey)
Debug "Decrypted:"
Debug decryptedStr
; Important: RSA encryption should only be used to encrypt small amounts of data.
; It is typically used for encrypting symmetric encryption
; keys such that a symmetric encryption algorithm, such as
; AES is then used to encrypt/decrypt bulk data
CkRsa::ckDispose(rsa)
CkPrivateKey::ckDispose(privKey)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsaDecryptor)
ProcedureReturn
EndProcedure