PowerBuilder
PowerBuilder
ClickBank Decrypt Instant Notification
See more ClickBank Examples
Demonstrates how to decrypt a ClickBank instant notification. See Instant Notification Service for more information and alternative code snippets.Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
string ls_SecretKey
string ls_JsonStr
oleobject loo_Json
oleobject loo_BdNotif
oleobject loo_BdIv
oleobject loo_Crypt
string ls_HexSha1
oleobject loo_BdKey
li_Success = 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// secret key from your ClickBank account
ls_SecretKey = "MY_SECRET_KEY"
ls_JsonStr = "{~"notification~":~"BASE64_NOTIFICATION~",~"iv~":~"BASE64_IV~"}"
loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")
if li_rc < 0 then
destroy loo_Json
MessageBox("Error","Connecting to COM object failed")
return
end if
li_Success = loo_Json.Load(ls_JsonStr)
// Get the encrypted notification (binary) and IV from the JSON.
loo_BdNotif = create oleobject
li_rc = loo_BdNotif.ConnectToNewObject("Chilkat.BinData")
loo_BdIv = create oleobject
li_rc = loo_BdIv.ConnectToNewObject("Chilkat.BinData")
li_Success = loo_BdNotif.AppendEncoded(loo_Json.StringOf("notification"),"base64")
li_Success = loo_BdIv.AppendEncoded(loo_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.
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
// Because we're using the hex string as the actual AES key, it matters whether the hex is uppercase or lowercase.
// We want lowercase.
loo_Crypt.EncodingMode = "hex_lower"
loo_Crypt.HashAlgorithm = "sha1"
ls_HexSha1 = loo_Crypt.HashStringENC(ls_SecretKey)
Write-Debug ls_HexSha1
// Treat the hex string as binary data for the AES key..
loo_BdKey = create oleobject
li_rc = loo_BdKey.ConnectToNewObject("Chilkat.BinData")
loo_BdKey.AppendString(ls_HexSha1,"us-ascii")
loo_BdKey.RemoveChunk(32,8)
loo_Crypt.KeyLength = 256
loo_Crypt.CryptAlgorithm = "aes"
loo_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..
loo_Crypt.SetEncodedIV(loo_BdIv.GetEncoded("base64"),"base64")
loo_Crypt.SetEncodedKey(loo_BdKey.GetEncoded("base64"),"base64")
loo_Crypt.DecryptBd(loo_BdNotif)
Write-Debug "Decrypted: " + loo_BdNotif.GetString("utf-8")
destroy loo_Json
destroy loo_BdNotif
destroy loo_BdIv
destroy loo_Crypt
destroy loo_BdKey