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_encrypt
和 openssl_get_cipher_method()
我有两个函数和一个随机生成的密钥:
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_encrypt
和 openssl_get_cipher_method()