mcrypt 编码的安全性如何

How safe is mcrypt encoding

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

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))),"[=10=]");
    return $aDecoded;
}

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

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

使用 base64 对登录信息的字符串进行编码并没有提高安全性。

要实现安全方法,我建议使用密钥绑定加密,就像 OpenSSL

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

看看 openssl_encryptopenssl_get_cipher_method()