代码点火器中的加密类可以用来在URL中发送安全数据吗?

时间:2014-11-11 07:08:27

标签: php codeigniter encryption base64 url-encoding

我尝试通过URL发送变量。所以我使用这个CI方法

$this->encrypt->encode($variable)

我在目的地解码它。但它没有返回正确的值。 编码值示例:

  

PWI + q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf / 3dadh0x + lU70h9hgSwFzTWQAEclSfoSZ2J3 / UOuLVwgA ==

我意识到这里有太多特殊字符,例如+/=。并允许URI中的这些字符是不明智的。

如果是这样,是否无法实现此功能以保护通过URL发送的数据?

2 个答案:

答案 0 :(得分:1)

encode的输出是Base64编码的加密数据。要传输它,您必须以URI安全格式对其进行编码。

PHP base64 page上建议使用这些功能

$base64 = $this->encrypt->encode($variable);
$urisafe = strtr($base64, '+/', '-_');
// or
$urisafe = strtr($base64, '+/=', '-_,');

decode之前,你必须改变这一点:

$base64 = strtr($urisafe, '-_', '+/');
// or
$base64 = strtr($urisafe, '-_,', '+/=');

第一个建议使其符合用于URL安全编码的RFC 4648 Table 2

strtr用安全字符替换有问题的字符。在上面的示例中,在编码过程中,+-替换为/_替换为{{1}}。

答案 1 :(得分:1)

我知道是什么让加密没有返回正确的值。这是因为它的特殊性。

pWI+q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf/3dadh0x+lU70h9hgSwFzTWQAEclSfoSZ2J3/UOuLVwgA==

此值中发送的内容仅为pWI+q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf,因为/个特殊字符而发生。

因此,如果我们想要发送这个编码值,我们必须使它安全。我们可以在解码后使用base64_encode()并在解码前使用base64_decode()。 就像在这个例子中一样:

编码使用

$id = '123';
$encrypted_id = $this->encrypt->encode($id);
$encrypted_id = base64_encode($encrypted_id);
//$url = 'www.trythis.com/site?id=' . $encrypted_id;

并解码

$encrypted_id = $_GET['id'];
$encrypted_id = base64_decode($encrypted_id);
$decrypted_id = $this->encrypt->decode($encrypted_id);