Sample code for 30+ languages & platforms
SQL Server

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 SQL Server Downloads

SQL Server
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    DECLARE @xml int
    EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    --  The sample input XML is available at http://www.chilkatsoft.com/data/fox.xml
    EXEC sp_OAMethod @xml, 'LoadXmlFile', @success OUT, 'fox.xml'
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @xml, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @xml
        RETURN
      END

    --  Navigate to the "fox1" node, which is the 1st child:
    EXEC sp_OAMethod @xml, 'FirstChild2', @success OUT

    --  Encrypt the content:
    EXEC sp_OAMethod @xml, 'EncryptContent', @success OUT, 'myPassword'

    --  Navigate back to the root:
    EXEC sp_OAMethod @xml, 'GetRoot2', NULL

    --  Examine the new XML document:
    EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    --  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:
    EXEC sp_OAMethod @xml, 'FirstChild2', @success OUT
    EXEC sp_OAMethod @xml, 'DecryptContent', @success OUT, 'myPassword'
    EXEC sp_OAMethod @xml, 'GetRoot2', NULL
    EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    --  Now encrypt the content of the "fox2" node.
    --  First navigate to the "fox2" child.
    EXEC sp_OAMethod @xml, 'FindChild2', @success OUT, 'fox2'
    EXEC sp_OAMethod @xml, 'EncryptContent', @success OUT, 'myPassword'
    EXEC sp_OAMethod @xml, 'GetRoot2', NULL
    EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    --  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:
    EXEC sp_OAMethod @xml, 'FindChild2', @success OUT, 'fox2'
    EXEC sp_OAMethod @xml, 'DecryptContent', @success OUT, 'myPassword'
    EXEC sp_OAMethod @xml, 'GetRoot2', NULL
    EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
    PRINT @sTmp0

    EXEC @hr = sp_OADestroy @xml


END
GO