Sample code for 30+ languages & platforms
Delphi DLL

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 Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, PrivateKey, Rsa, PublicKey;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
rsa: HCkRsa;
privKey: HCkPrivateKey;
pubKey: HCkPublicKey;
ccNumber: PWideChar;
usePrivateKey: Boolean;
encryptedStr: PWideChar;
rsaDecryptor: HCkRsa;
decryptedStr: PWideChar;

begin
success := False;

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

rsa := CkRsa_Create();

privKey := CkPrivateKey_Create();

// Load an RSA private key from a file:
success := CkPrivateKey_LoadAnyFormatFile(privKey,'rsaPrivateKey.key','');
if (success = False) then
  begin
    Memo1.Lines.Add(CkPrivateKey__lastErrorText(privKey));
    Exit;
  end;

// Get the public part of the private key.
pubKey := CkPublicKey_Create();
CkPrivateKey_ToPublicKey(privKey,pubKey);

success := CkRsa_UsePublicKey(rsa,pubKey);
if (success = False) then
  begin
    Memo1.Lines.Add(CkRsa__lastErrorText(rsa));
    Exit;
  end;

// Encrypt a VISA credit card number:
// 1234-5678-0000-9999
ccNumber := '1234567800009999';

usePrivateKey := False;
CkRsa_putEncodingMode(rsa,'base64');
encryptedStr := CkRsa__encryptStringENC(rsa,ccNumber,usePrivateKey);
Memo1.Lines.Add('Encrypted:');
Memo1.Lines.Add(encryptedStr);

// Now decrypt:
rsaDecryptor := CkRsa_Create();

CkRsa_putEncodingMode(rsaDecryptor,'base64');
CkRsa_UsePrivateKey(rsaDecryptor,privKey);

usePrivateKey := True;
decryptedStr := CkRsa__decryptStringENC(rsaDecryptor,encryptedStr,usePrivateKey);

Memo1.Lines.Add('Decrypted:');
Memo1.Lines.Add(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_Dispose(rsa);
CkPrivateKey_Dispose(privKey);
CkPublicKey_Dispose(pubKey);
CkRsa_Dispose(rsaDecryptor);

end;