14

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

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

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相同的用户键使用这个函数时,它都需要返回相同的东西。

我该怎么做?

4

2 回答 2

48
$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");

注意:mcrypt_decrypt 自 PHP 7.1.0 起已弃用。强烈建议不要依赖此功能。

于 2013-04-08T16:43:56.567 回答
1

使用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');
于 2021-11-18T20:58:25.830 回答