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

Jas*_*man 14 php encryption encode salt

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

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

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
Run Code Online (Sandbox Code Playgroud)

另一件事是每次我使用这个函数时,每次我使用encode具有相同用户密钥的函数时,它都需要返回相同的东西.

我该怎么办?

rin*_*hik 47

$myVarIWantToEncodeAndDecode
Run Code Online (Sandbox Code Playgroud)

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

编码:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key))));
Run Code Online (Sandbox Code Playgroud)

要解码:

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
Run Code Online (Sandbox Code Playgroud)

注意:自PHP 7.1.0起,mcrypt_decrypt已被弃用.非常不鼓励依赖此功能.

  • 甜美,简单,一个衬垫.万分感谢!!干杯!!+1 :) (2认同)
  • 不推荐使用mcrypt_encrypt/_decode.请改用openssl_encrypt/_decrypt.http://php.net/manual/en/function.openssl-encrypt.php (2认同)