Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Encrypting and Decrypting Content

See more XML Examples

Demonstrates how to encrypt and decrypt the content of an XML node using 128-bit CBC AES encryption.

The input XML, available at http://www.chilkatsoft.com/data/fox.xml, is this:

<root>
    <fox1>The quick brown fox jumps over the lazy dog</fox1>
    <fox2>The quick brown fox jumps over the lazy dog
        <child1>ABC</child1>
        <child2>XYZ</child2>
    </fox2>
</root>

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
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.Xml;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  xml: TXml;

begin
  success := False;

  xml := TXml.Create;

  //  The sample input XML is available at http://www.chilkatsoft.com/data/fox.xml
  success := xml.LoadXmlFile('fox.xml');
  if (success <> True) then
    begin
      WriteLn(xml.LastErrorText);
      Exit;
    end;

  //  Navigate to the "fox1" node, which is the 1st child:
  success := xml.FirstChild2();

  //  Encrypt the content:
  success := xml.EncryptContent('myPassword');

  //  Navigate back to the root:
  xml.GetRoot2();

  //  Examine the new XML document:
  WriteLn(xml.GetXml());

  //  This is the XML w/ the encrypted content:
  //  <root>
  //      <fox1>1hTtf7XmO+78H+OIr5eWHIuXxP78KPeYrZbsD0HX4negO9ZRqYMBY4s46sPNp+Q+
  //      </fox1>
  //      <fox2>The quick brown fox jumps over the lazy dog
  //          <child1>ABC</child1>
  //          <child2>XYZ</child2>
  //      </fox2>
  //  </root>

  //  Now decrypt and show that the original content was restored:
  success := xml.FirstChild2();
  success := xml.DecryptContent('myPassword');
  xml.GetRoot2();
  WriteLn(xml.GetXml());

  //  Now encrypt the content of the "fox2" node.
  //  First navigate to the "fox2" child.
  success := xml.FindChild2('fox2');
  success := xml.EncryptContent('myPassword');
  xml.GetRoot2();
  WriteLn(xml.GetXml());

  //  This is the XML w/ the "fox2" encrypted content:

  //  <root>
  //      <fox1>The quick brown fox jumps over the lazy dog</fox1>
  //      <fox2>1hTtf7XmO+78H+OIr5eWHIuXxP78KPeYrZbsD0HX4negO9ZRqYMBY4s46sPNp+Q+
  //  
  //          <child1>ABC</child1>
  //          <child2>XYZ</child2>
  //      </fox2>
  //  </root>

  //  Notice that the *content* of the node is encrypted.  The child nodes are NOT encrypted.
  //  This is intentional.  To encrypt the content + the subtrees rooted at a given node, 
  //  one would call ZipTree to transform the content and subtrees
  //  to Base64-encoded compressed content, and then call
  //  EncryptContent to encrypt.

  //  Finally, decrypt the "fox2" content:
  success := xml.FindChild2('fox2');
  success := xml.DecryptContent('myPassword');
  xml.GetRoot2();
  WriteLn(xml.GetXml());


  xml.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.