Sample code for 30+ languages & platforms
Classic ASP

Decrypt a govtalk.gov.uk SOAP GovTalkMessage

See more Encryption Examples

Demonstrates how to decrypt the content contained in the XML of a GovTalkMessage SOAP response.

Chilkat Classic ASP Downloads

Classic ASP
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%
success = 0

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

'  The GovTalkMessage response looks something like this:

'  <?xml version="1.0" encoding="utf-8"?>
'  <GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
'    <EnvelopeVersion>3.1</EnvelopeVersion>
'    <Header>
'      <MessageDetails>
'        <Class>CSSZ_DZDPN</Class>
'        <Qualifier>request</Qualifier>
'        <Function>submit</Function>
'        <TransactionID />
'        <AuditID />
'        <CorrelationID>aaaaa</CorrelationID>
'        <ResponseEndPoint PollInterval="0" />
'        <Transformation>XML</Transformation>
'        <GatewayTest />
'        <GatewayTimestamp />
'      </MessageDetails>
'      <SenderDetails>
'        <IDAuthentication>
'          <SenderID />
'          <Authentication>
'            <Method>clear</Method>
'            <Role />
'            <Value />
'          </Authentication>
'        </IDAuthentication>
'        <X509Certificate />
'        <EmailAddress>somebody@example.com</EmailAddress>
'      </SenderDetails>
'    </Header>
'    <GovTalkDetails>
'      <Keys>
'        <Key Type="vars">9999999999</Key>
'      </Keys>
'      <GatewayAdditions>
'        <Source>VREP</Source>
'      </GatewayAdditions>
'    </GovTalkDetails>
'    <Body>
'      <Message xmlns="http://www.cssz.cz/XMLSchema/envelope" version="1.2" eType="DZDPN20">
'        <Header>
'          <Signature xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64">MIIJ0A ... UMw=
'  </Signature>
'          <Vendor productName="some product name" version="2019" />
'        </Header>
'        <Body xmlns:dt="urn:schemas-microsoft-com:datatypes" encrypted="yes" contentEncoding="gzip" dt:dt="bin.base64">MIIF2w ... N2vW</Body>
'      </Message>
'    </Body>
'  </GovTalkMessage>

'  We want to get the content of the Body and decrypt it.

'  First, let's get the content of the Body XML element, which is a base64 string starting with MIIF2w...

set xml = Server.CreateObject("Chilkat.Xml")
success = xml.LoadXmlFile("qa_data/xml/govTalkMessageResponse.xml")
If (success = 0) Then
    Response.Write "<pre>" & Server.HTMLEncode( xml.LastErrorText) & "</pre>"
    Response.End
End If

Body = xml.GetChildContent("Body|Message|Body")
Response.Write "<pre>" & Server.HTMLEncode( Body) & "</pre>"

set cert = Server.CreateObject("Chilkat.Cert")
success = cert.LoadPfxFile("qa_data/pfx/govTalkMessage_aaa.pfx","aaa")
If (success = 0) Then
    Response.Write "<pre>" & Server.HTMLEncode( cert.LastErrorText) & "</pre>"
    Response.End
End If

set crypt = Server.CreateObject("Chilkat.Crypt2")
crypt.CryptAlgorithm = "pki"
success = crypt.SetDecryptCert(cert)
If (success = 0) Then
    Response.Write "<pre>" & Server.HTMLEncode( crypt.LastErrorText) & "</pre>"
    Response.End
End If

set bd = Server.CreateObject("Chilkat.BinData")
'  Append the bytes to bd.
success = bd.AppendEncoded(Body,"base64")

'  Decrypt in-place.
success = crypt.DecryptBd(bd)
If (success = 0) Then
    Response.Write "<pre>" & Server.HTMLEncode( crypt.LastErrorText) & "</pre>"
    Response.End
End If

'  Save the decrypted data to a file.
success = bd.WriteFile("qa_output/out.dat")

'  If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex:
Response.Write "<pre>" & Server.HTMLEncode( "Decrypted bytes as hex: " & bd.GetEncoded("hex")) & "</pre>"

%>
</body>
</html>