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>