Skip to content

Instantly share code, notes, and snippets.

@joshhartman
Last active April 20, 2022 08:44
Show Gist options
  • Save joshhartman/5383582 to your computer and use it in GitHub Desktop.
Save joshhartman/5383582 to your computer and use it in GitHub Desktop.

Revisions

  1. joshhartman revised this gist Sep 26, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion mcrypt-cbc.php
    Original file line number Diff line number Diff line change
    @@ -16,7 +16,7 @@ function mc_encrypt($encrypt, $key){

    // Decrypt Function
    function mc_decrypt($decrypt, $key){
    $decrypt = explode('|', $decrypt);
    $decrypt = explode('|', $decrypt.'|');
    $decoded = base64_decode($decrypt[0]);
    $iv = base64_decode($decrypt[1]);
    if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)){ return false; }
  2. joshhartman revised this gist Jun 16, 2014. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions mcrypt-cbc.php
    Original file line number Diff line number Diff line change
    @@ -19,6 +19,7 @@ function mc_decrypt($decrypt, $key){
    $decrypt = explode('|', $decrypt);
    $decoded = base64_decode($decrypt[0]);
    $iv = base64_decode($decrypt[1]);
    if(strlen($iv)!==mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)){ return false; }
    $key = pack('H*', $key);
    $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv));
    $mac = substr($decrypted, -64);
  3. joshhartman revised this gist Nov 14, 2013. 1 changed file with 11 additions and 4 deletions.
    15 changes: 11 additions & 4 deletions mcrypt-cbc.php
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,15 @@
    <?php
    // Define an strong encryption key to use with MCRYPT
    // Note: The same encryption key used to encrypt the data must be used to decrypt the data correctly
    define('ENCRYPTION_KEY', '0GSQKwtk14lzW4TkRrOZwxUM5QaNIE8a');
    // Define a 32-byte (64 character) hexadecimal encryption key
    // Note: The same encryption key used to encrypt the data must be used to decrypt the data
    define('ENCRYPTION_KEY', 'd0a7e7997b6d5fcd55f4b5c32611b87cd923e88837b63bf2941ef819dc8ca282');

    // Encrypt Function
    function mc_encrypt($encrypt, $key){
    $encrypt = serialize($encrypt);
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
    $key = pack('H*', $key);
    $mac = hash_hmac('sha256', $encrypt, substr(bin2hex($key), -32));
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt.$mac, MCRYPT_MODE_CBC, $iv);
    $encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
    return $encoded;
    }
    @@ -17,7 +19,12 @@ function mc_decrypt($decrypt, $key){
    $decrypt = explode('|', $decrypt);
    $decoded = base64_decode($decrypt[0]);
    $iv = base64_decode($decrypt[1]);
    $key = pack('H*', $key);
    $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv));
    $mac = substr($decrypted, -64);
    $decrypted = substr($decrypted, 0, -64);
    $calcmac = hash_hmac('sha256', $decrypted, substr(bin2hex($key), -32));
    if($calcmac!==$mac){ return false; }
    $decrypted = unserialize($decrypted);
    return $decrypted;
    }
  4. joshhartman revised this gist Nov 12, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion mcrypt-cbc.php
    Original file line number Diff line number Diff line change
    @@ -6,7 +6,7 @@
    // Encrypt Function
    function mc_encrypt($encrypt, $key){
    $encrypt = serialize($encrypt);
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
    $encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
    return $encoded;
  5. joshhartman created this gist Apr 14, 2013.
    44 changes: 44 additions & 0 deletions mcrypt-cbc.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,44 @@
    <?php
    // Define an strong encryption key to use with MCRYPT
    // Note: The same encryption key used to encrypt the data must be used to decrypt the data correctly
    define('ENCRYPTION_KEY', '0GSQKwtk14lzW4TkRrOZwxUM5QaNIE8a');

    // Encrypt Function
    function mc_encrypt($encrypt, $key){
    $encrypt = serialize($encrypt);
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
    $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
    $encoded = base64_encode($passcrypt).'|'.base64_encode($iv);
    return $encoded;
    }

    // Decrypt Function
    function mc_decrypt($decrypt, $key){
    $decrypt = explode('|', $decrypt);
    $decoded = base64_decode($decrypt[0]);
    $iv = base64_decode($decrypt[1]);
    $decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_CBC, $iv));
    $decrypted = unserialize($decrypted);
    return $decrypted;
    }

    echo '<h1>Rijndael 256-bit CBC Encryption Function</h1>';

    $data = 'Super secret confidential string data.';
    $encrypted_data = mc_encrypt($data, ENCRYPTION_KEY);
    echo '<h2>Example #1: String Data</h2>';
    echo 'Data to be Encrypted: ' . $data . '<br/>';
    echo 'Encrypted Data: ' . $encrypted_data . '<br/>';
    echo 'Decrypted Data: ' . mc_decrypt($encrypted_data, ENCRYPTION_KEY) . '</br>';

    $data = array(1, 5, 8, 9, 22, 10, 61);
    $encrypted_data = mc_encrypt($data, ENCRYPTION_KEY);
    echo '<h2>Example #2: Non-String Data</h2>';
    echo 'Data to be Encrypted: <pre>';
    print_r($data);
    echo '</pre><br/>';
    echo 'Encrypted Data: ' . $encrypted_data . '<br/>';
    echo 'Decrypted Data: <pre>';
    print_r(mc_decrypt($encrypted_data, ENCRYPTION_KEY));
    echo '</pre>';
    ?>