【发布时间】:2017-09-12 23:34:45
【问题描述】:
我有两个函数和一个随机生成的密钥:
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 文件中生成!
【问题讨论】:
-
您指定
MCRYPT_RIJNDAEL_256,这可能不会给您您的想法。256指的是块大小,而不是密钥大小。通常,128 位的块大小被指定为与 AES 兼容。 -
对于CBC模式使用随机IV,只需在加密数据前加上IV用于解密即可,不需要保密。
标签: php mysql decode encode mcrypt