Skip to content

Examples

Below you can find some examples of how to decrypt the webhook notification: 

  • C#
  • JAVA
  • PHP
  • Python
using System; 
using System.Security.Cryptography; 
using System.Text;public static class Program { 
 public static void Main() { 

 byte[] secret = System.Convert.FromBase64String("6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ="); 

 byte[] ciphertext = System.Convert.FromBase64String("9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7"+ 
"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8"+ 
"1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl"+ 
"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8"+ 
"1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48"+ 
"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I="); 

  byte[] nonce = System.Convert.FromBase64String("RYjpCMtUmK54T6Lk"); 
 
 byte[] tag = System.Convert.FromBase64String("FUajWHmZjP4A5qaa1G0kxw=="); 

 using (var aes = new AesGcm(secret)) 
 { 
 var plaintextBytes = new byte[ciphertext.Length]; 
 aes.Decrypt(nonce, ciphertext, tag, plaintextBytes); 
 string decrypt = Encoding.UTF8.GetString(plaintextBytes);
 Console.WriteLine(decrypt); 
 } 
 } 
} 
import java.security.Security; 
import java.util.Base64; 
import javax.crypto.Cipher; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.SecretKeySpec; 
import com.google.common.base.Charsets; 
import org.apache.commons.lang3.ArrayUtils; 
import org.bouncycastle.jce.provider.BouncyCastleProvider; 

// For Java and JVM-based languages, you might need to install unrestricted policy file for JVM, 
// which is provided by Sun. Please refer BouncyCastle FAQ if you get 
// java.lang.SecurityException: Unsupported keysize or algorithm parameters or 
// java.security.InvalidKeyException: Illegal key size. 
// If you cannot install unrestricted policy file for JVM because of some reason, you can try with reflection: See here.public class Test { 
 public static void main(String[] args) { 
 try { 
  Security.addProvider(new BouncyCastleProvider()); 

  // Data from configuration String keyFromConfiguration = "6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ="; 

  // Data from server String ivFromHttpHeader = "RYjpCMtUmK54T6Lk"; 
 String authTagFromHttpHeader = "FUajWHmZjP4A5qaa1G0kxw=="; 
 String httpBody = "9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7" 
+"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8" 
+"1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl" 
+"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8" 
+"1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48" 
+"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I="; 

 // Convert data to process byte[] key = Base64.getDecoder().decode(keyFromConfiguration); 
 byte[] iv = Base64.getDecoder().decode(ivFromHttpHeader); 
 byte[] authTag = Base64.getDecoder().decode(authTagFromHttpHeader); 
 byte[] encryptedText = Base64.getDecoder().decode(httpBody); 
 
 // Unlike other programming language, We have to append auth tag at the end of 

 // encrypted text in Java  byte[] cipherText = ArrayUtils.addAll(encryptedText, authTag); 
 
  // Prepare decryption SecretKeySpec keySpec = new SecretKeySpec(key, 0, 32, "AES"); 
 Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); 
 cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv)); 

 // Decrypt byte[] bytes = cipher.doFinal(cipherText);
 System.out.println(new String(bytes, Charsets.UTF_8)); 
 
 } catch (Exception e) { 
 e.printStackTrace(); 
 } 
 } 
}
function sodium_decrypt( $webhookSecret, $iv_from_http_header, $http_body , $auth_tag_from_http_header ){ 
 $key = mb_convert_encoding($webhookSecret, "UTF-8", "BASE64"); 
 $iv = mb_convert_encoding($iv_from_http_header, "UTF-8", "BASE64"); 
 $cipher_text = mb_convert_encoding($http_body, "UTF-8", "BASE64") . mb_convert_encoding($auth_tag_from_http_header, "UTF-8", "BASE64"); 
 $result = sodium_crypto_aead_aes256gcm_decrypt($cipher_text, "", $iv, $key); 

 return $result; 
} $webhookSecret = "6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ="; 
$iv_from_http_header = "RYjpCMtUmK54T6Lk"; 
$auth_tag_from_http_header = "FUajWHmZjP4A5qaa1G0kxw=="; 
$http_body = "9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7" . 
"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8" . 
"1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl" . 
"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8" . 
"1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48" . 
"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I="; // Decrypt message 
$result = sodium_decrypt($webhookSecret, $iv_from_http_header, $http_body , $auth_tag_from_http_header); 

print($result); 
import base64 from Cryptodome.Cipher import AES 
def decrypt_AES_GCM(encryptedMsg, authTag, secretKey, iv): iv = base64.b64decode(iv) 
 encryptedMsg = base64.b64decode(encryptedMsg) 
 secretKey = base64.b64decode(secretKey) 
 authTag = base64.b64decode(authTag) 
 aesCipher = AES.new(secretKey, AES.MODE_GCM, iv) 
 plaintext = aesCipher.decrypt_and_verify(encryptedMsg, authTag) 

return plaintext example = { 
"encoded" : "9bIjURJIcwoKvQr+ifOTH3HbMX+IqmsRqHuG/I1GfbSX89JE5DcWh/p8QROC5pRAuYZ7" \ 
"ln7RSkHXJdZpVz1LFQ2859WsetvHHui7qYmfxATOO1j0AQuPdAD3FeRH0kR4s/v3c2nV8" \ 
"1DnUXFCnQER/+VWrYdbu5vn8gm+diSE6CHvkK+ODy0ebVi5O6VBnWVjgBUG33VwWiAyIl" \ 
"7Ik435V55WnZgynH3GfbVYoGwZ5UhYtn3yw2yruiLAKu6VTBvnh/ZJP21cHCJSF6NPSd+8" \ 
"1gzWFU/+ECm3cf3uBbCkmKmL7HxRhRxhG0lMtX6ELZOXuw3eDJ1BTu+sSMkV/5Xk+5XX48" 
"XmP6CGZ7KmP7Q3Fw1kZmhn0unFyv0Gw8PjT1Ohny/HMgNl16I=", 
"iv" : "RYjpCMtUmK54T6Lk", 
"tag" : "FUajWHmZjP4A5qaa1G0kxw==", 
"secret" : "6fNDiYU0T0/evFpmfycNai/AqF24i+rT0OmuVw0/sGQ=" 
} result = decrypt_AES_GCM(example['encoded'], example['tag'], example['secret'], example['iv']) 
print(result) 
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.