Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Decrypt a govtalk.gov.uk SOAP GovTalkMessageDemonstrates how to decrypt the content contained in the XML of a GovTalkMessage SOAP response.
LOCAL loXml LOCAL lnSuccess LOCAL lcBody LOCAL loCert LOCAL loCrypt LOCAL loBd * 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... * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml') loXml = CreateObject('Chilkat.Xml') lnSuccess = loXml.LoadXmlFile("qa_data/xml/govTalkMessageResponse.xml") IF (lnSuccess = 0) THEN ? loXml.LastErrorText RELEASE loXml CANCEL ENDIF lcBody = loXml.GetChildContent("Body|Message|Body") ? lcBody * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Cert') loCert = CreateObject('Chilkat.Cert') lnSuccess = loCert.LoadPfxFile("qa_data/pfx/govTalkMessage_aaa.pfx","aaa") IF (lnSuccess = 0) THEN ? loCert.LastErrorText RELEASE loXml RELEASE loCert CANCEL ENDIF * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Crypt2') loCrypt = CreateObject('Chilkat.Crypt2') loCrypt.CryptAlgorithm = "pki" lnSuccess = loCrypt.SetDecryptCert(loCert) IF (lnSuccess = 0) THEN ? loCrypt.LastErrorText RELEASE loXml RELEASE loCert RELEASE loCrypt CANCEL ENDIF * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.BinData') loBd = CreateObject('Chilkat.BinData') * Append the bytes to bd. lnSuccess = loBd.AppendEncoded(lcBody,"base64") * Decrypt in-place. lnSuccess = loCrypt.DecryptBd(loBd) IF (lnSuccess = 0) THEN ? loCrypt.LastErrorText RELEASE loXml RELEASE loCert RELEASE loCrypt RELEASE loBd CANCEL ENDIF * Save the decrypted data to a file. lnSuccess = loBd.WriteFile("qa_output/out.dat") * If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex: ? "Decrypted bytes as hex: " + loBd.GetEncoded("hex") RELEASE loXml RELEASE loCert RELEASE loCrypt RELEASE loBd |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.