Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
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 Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.PrivateKey,
Chilkat.Rsa,
Chilkat.PublicKey;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
rsa: TRsa;
privKey: TPrivateKey;
pubKey: TPublicKey;
ccNumber: string;
usePrivateKey: Boolean;
encryptedStr: string;
rsaDecryptor: TRsa;
decryptedStr: string;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
rsa := TRsa.Create;
privKey := TPrivateKey.Create;
// Load an RSA private key from a file:
success := privKey.LoadAnyFormatFile('rsaPrivateKey.key','');
if (success = False) then
begin
WriteLn(privKey.LastErrorText);
Exit;
end;
// Get the public part of the private key.
pubKey := TPublicKey.Create;
privKey.ToPublicKey(pubKey);
success := rsa.UsePublicKey(pubKey);
if (success = False) then
begin
WriteLn(rsa.LastErrorText);
Exit;
end;
// Encrypt a VISA credit card number:
// 1234-5678-0000-9999
ccNumber := '1234567800009999';
usePrivateKey := False;
rsa.EncodingMode := 'base64';
encryptedStr := rsa.EncryptStringENC(ccNumber,usePrivateKey);
WriteLn('Encrypted:');
WriteLn(encryptedStr);
// Now decrypt:
rsaDecryptor := TRsa.Create;
rsaDecryptor.EncodingMode := 'base64';
rsaDecryptor.UsePrivateKey(privKey);
usePrivateKey := True;
decryptedStr := rsaDecryptor.DecryptStringENC(encryptedStr,usePrivateKey);
WriteLn('Decrypted:');
WriteLn(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.
rsa.Free;
privKey.Free;
pubKey.Free;
rsaDecryptor.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.