User Tools

Site Tools


php:json_encryption_decryption

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

php:json_encryption_decryption [2018/11/27 14:54] (current)
john created
Line 1: Line 1:
 +===== JSON Encryption/Decryption =====
 +This code works with a JSON stream encrypted with CryptoJS. You can use PHP with openSSL support to decrypt the data stream using your password. 
  
 +==== Decrypt ====
 +<code>
 +/**
 +* Decrypt data from a CryptoJS json encoding string
 +*
 +* @param mixed $passphrase
 +* @param mixed $jsonString
 +* @return mixed
 +*/
 +function Decrypt($passphrase, $jsonString){
 +    $jsondata = json_decode($jsonString, true);
 +    $salt = hex2bin($jsondata["s"]);
 +    $ct = base64_decode($jsondata["ct"]);
 +    $iv  = hex2bin($jsondata["iv"]);
 +    $concatedPassphrase = $passphrase.$salt;
 +    $md5 = array();
 +    $md5[0] = md5($concatedPassphrase, true);
 +    $result = $md5[0];
 +    for ($i = 1; $i < 3; $i++) {
 +        $md5[$i] = md5($md5[$i - 1].$concatedPassphrase, true);
 +        $result .= $md5[$i];
 +    }
 +    $key = substr($result, 0, 32);
 +    $data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv);
 +    return json_decode($data, true);
 +}
 +
 +</code>
 +
 +==== Encrypt ====
 +<code>
 +/**
 +* Encrypt value to a cryptojs compatiable json encoding string
 +*
 +* @param mixed $passphrase
 +* @param mixed $value
 +* @return string
 +*/
 +function Encrypt($passphrase, $value){
 +    $salt = openssl_random_pseudo_bytes(8);
 +    $salted = '';
 +    $dx = '';
 +    while (strlen($salted) < 48) {
 +        $dx = md5($dx.$passphrase.$salt, true);
 +        $salted .= $dx;
 +    }
 +    $key = substr($salted, 0, 32);
 +    $iv  = substr($salted, 32,16);
 +    $encrypted_data = openssl_encrypt(json_encode($value), 'aes-256-cbc', $key, true, $iv);
 +    $data = array("ct" => base64_encode($encrypted_data), "iv" => bin2hex($iv), "s" => bin2hex($salt));
 +    return json_encode($data);
 +}
 +
 +</code>
 +
 +==== Execute ====
 +<code>
 +
 +$json = file_get_contents('https://encryptedURL');
 +$data = json_decode($json);
 +$secret = "YOUR PASSWORD";
 +$rdat = Decrypt($secret, $json);
 +echo $rdat;
 +
 +</code>
 +
 +==== Example PHP ====
 +<code>
 +$encrypted = Encrypt("my passphrase", "value to encrypt");
 +$decrypted = Decrypt("my passphrase", $encrypted);
 +</code>
php/json_encryption_decryption.txt ยท Last modified: 2018/11/27 14:54 by john