looking for simple PHP multi way encryption method

前端 未结 3 1438
一向
一向 2020-12-18 13:52

I need to decrypt encrypted POST value strings with the aid of a secret static key.

I have had a look into crypt() (but it\'s only one-way) and Mcrypt, GnuPG,... but

相关标签:
3条回答
  • 2020-12-18 14:21

    Update (27/09/17):

    Since mcrypt_encrypt is DEPRECATED as of PHP 7.1.0. Ive added a simple encrypt/decrypt using openssl.

    function encrypt($string, $key = 'PrivateKey', $secret = 'SecretKey', $method = 'AES-256-CBC') {
        // hash
        $key = hash('sha256', $key);
        // create iv - encrypt method AES-256-CBC expects 16 bytes
        $iv = substr(hash('sha256', $secret), 0, 16);
        // encrypt
        $output = openssl_encrypt($string, $method, $key, 0, $iv);
        // encode
        return base64_encode($output);
    }
    
    function decrypt($string, $key = 'PrivateKey', $secret = 'SecretKey', $method = 'AES-256-CBC') {
        // hash
        $key = hash('sha256', $key);
        // create iv - encrypt method AES-256-CBC expects 16 bytes
        $iv = substr(hash('sha256', $secret), 0, 16);
        // decode
        $string = base64_decode($string);
        // decrypt
        return openssl_decrypt($string, $method, $key, 0, $iv);
    }
    
    $str = 'Encrypt this text';
    echo "Plain: " .$str. "\n";
    
    // encrypt
    $encrypted_str = encrypt($str);
    echo "Encrypted: " .$encrypted_str. "\n";
    
    // decrypt
    $decrypted_str = decrypt($encrypted_str);
    echo "Decrypted: " .$decrypted_str. "\n";
    

    Original Answer:

    Cant get simpler then this: (PHP < 7.1.0):

    <?php 
    define('SECRET',md5('Some secret key'));
    
    function encrypt($value){
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SECRET, $value, MCRYPT_MODE_ECB, $iv);
    }
    
    function decrypt($value){
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SECRET, $value, MCRYPT_MODE_ECB, $iv));
    }
    
    ?>
    
    0 讨论(0)
  • 2020-12-18 14:42

    This is the only basic built in function I know of.

    $string = "/path/img.jpg";
    
    $scramble = str_rot13($string);
    
    echo "<p>Scrambled: ".$scramble;
    
    echo "<p>Unscrambled: ".str_rot13($scramble);
    
    0 讨论(0)
  • 2020-12-18 14:45

    You could just wrap up the built in functions to make them more friendly. Like in the second user post on the doc page for mcrypt_cbc:

    <?php
    $stuff="String to enc/enc/dec/dec =,=,";
    $key="XiTo74dOO09N48YeUmuvbL0E";
    
    function nl() {
        echo "<br/> \n";
    }
    $iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
    
    // Encrypting
    function encrypt($string, $key) {
        $enc = "";
        global $iv;
        $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);
    
      return base64_encode($enc);
    }
    
    // Decrypting
    function decrypt($string, $key) {
        $dec = "";
        $string = trim(base64_decode($string));
        global $iv;
        $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
      return $dec;
    }
    
    $encrypted = encrypt($stuff, $key);
    $decrypted = decrypt($encrypted, $key);
    
    echo "Encrypted is ".$encrypted . nl();
    echo "Decrypted is ".$decrypted . nl();
    ?>
    
    0 讨论(0)
提交回复
热议问题