mcrypt编码的安全性

时间:2017-04-17 10:47:41

标签: php mysql decode encode mcrypt

我有两个函数和一个随机生成的密钥:

function encode ($a) {
    $key = "7HLgdzXyaTaZuTss6xayLk3qLTJ2jsRLgPnMzpNwhwnEZsnHUfHxfYW5r3sQcZsC";
    $aEncoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,md5($key),$a,MCRYPT_MODE_CBC,md5(md5($key))));
    return $aEncoded;
}

function decode ($a) {
    $key = "7HLgdzXyaTaZuTss6xayLk3qLTJ2jsRLgPnMzpNwhwnEZsnHUfHxfYW5r3sQcZsC";
    $aDecoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,md5($key),base64_decode($a),MCRYPT_MODE_CBC,md5(md5($key))),"\0");
    return $aDecoded;
}

当用户登录时,一些私人数据和当前时间戳将被编码并保存为会话cookie。同样的时间戳也会保存在mysql数据库中。现在,我想在将数据包发送到ws服务器时对用户进行身份验证。将密钥发送到服务器,在那里解码并检查密钥的时间戳是否与mysql数据库中保存的最后一次登录相匹配是否安全? (我还会检查钥匙是否老了,所以如果有人不再登录,钥匙将在6小时后不再起作用。

编辑:用户将无法看到这些功能,密钥将在登录php文件中生成!

1 个答案:

答案 0 :(得分:2)

使用base64对字符串进行编码以获取登录信息不会增加安全性。

为了实现安全方法,我建议使用密钥绑定加密,就像 OpenSSL 一样。

PHP也支持它,你可以在你的php程序中定义一个密钥并使用它加密你的cookie,我还建议使用动态密钥(即6位数日期170417),以防你需要cookie完全不可发现!

查看openssl_encryptopenssl_get_cipher_method()