代码之家  ›  专栏  ›  技术社区  ›  Jason Silberman

如何使用特定的密钥PHP创建双向编码/解码方法?

  •  14
  • Jason Silberman  · 技术社区  · 11 年前

    我需要两个函数/方法,一个进行编码,一个解码。 这不是用于存储密码 每个用户将具有特定的密钥/盐来对数据进行编码。

    这就是我希望它的工作方式:

    function encode($str, $key) {
        // something fancy
    }
    
    function decode($str, $key) {
        // something fancy
    }
    
    $key = $logged_in_user->get_key();
    $plain = 'abc abc 123 123';
    $encoded_data = encode($plain, $key);
    // some_fancy_encrypted_data_that_is_really_cooooool
    $decoded_data = decode($encoded_data, $key);
    // abc abc 123 123
    

    另一件事是,每次使用此函数时,它都需要在每次使用 encode 功能。

    我该怎么做??

    2 回复  |  直到 11 年前
        1
  •  48
  •   Ali Hesari    7 年前
    $myVarIWantToEncodeAndDecode
    

    定义关键(盐、肉汤等): $key = "#&$sdfdfs789fs7d";

    要进行编码:

    $encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key))));
    

    要解码:

    $decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    

    注意:从PHP 7.1.0开始,mcrypt_decrypt已被弃用。非常不鼓励依赖此功能。

        2
  •  1
  •   Gowthamraj Vungarala    3 年前

    使用 openssl_encrypt 而不是 mcrypt_encrypt

    mcrypt_encrypt(加密) 从PHP 7.1.0起弃用,从PHP 7.2.0起删除。

    所以,试试这个。。

    function encrypt_decrypt($string, $action = 'encrypt')
    {
        $encrypt_method = "AES-256-CBC";
        $secret_key = 'AA74CDCC2BBRT935136HH7B63C27'; // user define private key
        $secret_iv = '5fgf5HJ5g27'; // user define secret key
        $key = hash('sha256', $secret_key);
        $iv = substr(hash('sha256', $secret_iv), 0, 16); // sha256 is hash_hmac_algo
        if ($action == 'encrypt') {
            $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
            $output = base64_encode($output);
        } else if ($action == 'decrypt') {
            $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
        }
        return $output;
    }
     
    echo "Your Encrypted password is = ". $pwd = encrypt_decrypt('spaceo', 'encrypt');
    echo "Your Decrypted password is = ". encrypt_decrypt($pwd, 'decrypt');