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
(Delphi ActiveX) ClickBank Decrypt Instant NotificationDemonstrates how to decrypt a ClickBank instant notification. See Instant Notification Service for more information and alternative code snippets.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB; ... procedure TForm1.Button1Click(Sender: TObject); var secretKey: WideString; jsonStr: WideString; json: TChilkatJsonObject; success: Integer; bdNotif: TChilkatBinData; bdIv: TChilkatBinData; crypt: TChilkatCrypt2; hexSha1: WideString; bdKey: TChilkatBinData; begin // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // secret key from your ClickBank account secretKey := 'MY_SECRET_KEY'; jsonStr := '{"notification":"BASE64_NOTIFICATION","iv":"BASE64_IV"}'; json := TChilkatJsonObject.Create(Self); success := json.Load(jsonStr); // Get the encrypted notification (binary) and IV from the JSON. bdNotif := TChilkatBinData.Create(Self); bdIv := TChilkatBinData.Create(Self); success := bdNotif.AppendEncoded(json.StringOf('notification'),'base64'); success := bdIv.AppendEncoded(json.StringOf('iv'),'base64'); // Get an SHA1 digest (as a hex string) of the secret key. // A SHA1 digest is 20 bytes. Therefore the hex string is 40 chars. // Treat each us-ascii char as a binary byte of the secret key. // 256-bit AES needs a 256-bit key, which is 32-bytes. Therefore // use the 1st 32 us-ascii chars of the hex SHA1 as the AES secret key. crypt := TChilkatCrypt2.Create(Self); // Because we're using the hex string as the actual AES key, it matters whether the hex is uppercase or lowercase. // We want lowercase. crypt.EncodingMode := 'hex_lower'; crypt.HashAlgorithm := 'sha1'; hexSha1 := crypt.HashStringENC(secretKey); Memo1.Lines.Add(hexSha1); // Treat the hex string as binary data for the AES key.. bdKey := TChilkatBinData.Create(Self); bdKey.AppendString(hexSha1,'us-ascii'); bdKey.RemoveChunk(32,8); crypt.KeyLength := 256; crypt.CryptAlgorithm := 'aes'; crypt.CipherMode := 'cbc'; // We can use any encoding because were just getting the binary bytes in an encoding, and then setting from the same encoding. // We'll just use base64.. crypt.SetEncodedIV(bdIv.GetEncoded('base64'),'base64'); crypt.SetEncodedKey(bdKey.GetEncoded('base64'),'base64'); crypt.DecryptBd(bdNotif.ControlInterface); Memo1.Lines.Add('Decrypted: ' + bdNotif.GetString('utf-8')); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.