我写了一个小类来发送带有 url 的私有数据(不能使用 cookie/会话或其他任何东西)。我使用 PHP 的 mcrypt 对其进行加密/解密,并对其进行 base64-en/解码以在 url 中使用。
不幸的是,我仍然不时得到错误的结果。+
我注意到,当网址中至少出现 a 时,总是会发生这种情况。我也玩过rawurlencode
and urlencode
/ urldecode
,但没有成功。我也尝试strtr()
了加密数据,但不知何故+
仍然出现。有人有想法吗?
这是我的课:
class crypto
{
public function __construct()
{
$this->iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$this->iv = mcrypt_create_iv($this->iv_size, MCRYPT_RAND);
$this->llave = 'da332sdf9';
}
public function make_crypt($string)
{
$crypt = mcrypt_encrypt(MCRYPT_BLOWFISH, $this->llave, $string, MCRYPT_MODE_ECB, $this->iv);
$crypt = rawurlencode(base64_encode($crypt));
$crypt = strtr($crypt, '+/', '-_');
return $crypt;
}
public function get_crypt($data)
{
$crypt = strtr($crypt, '-_', '+/');
$data = base64_decode($data);
$decrypted = mcrypt_decrypt (MCRYPT_BLOWFISH, $this->llave, $data, MCRYPT_MODE_ECB, $this->iv);
return $decrypted;
}
}