【问题标题】:Can the encrypt class in code igniter be used to send secure data in URL?可以使用代码点火器中的加密类在 URL 中发送安全数据吗?
【发布时间】:2014-11-11 07:08:26
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • AFAIK 库名称是 encrypt 而不是 encryption 参考 Documentation
  • @karanthakkar 抱歉,打错了。我的意思是加密
  • 你有Mcrypt extension 吗?您使用哪种加密模式,还包括哪个变量产生这样的 OP
  • @karanthakkar 我使用默认的。如果我使用 Mcrypt 扩展,它可以变得更短和更少的特殊字符吗?

标签: php codeigniter encryption base64 url-encoding


【解决方案1】:

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

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

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

decodeing 之前,您必须扭转这一点:

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

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

strtr 将违规字符替换为安全字符。在上面的例子中,在编码过程中+-替换,/_替换。

【讨论】:

    【解决方案2】:

    我知道是什么导致加密没有返回正确的值。这是因为它的特殊字符。

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

    在这个值中发送的只是pWI+q72keVNJtpaZgJdxfwuKtqM2VrNMGhpnknsrf,这是因为/特殊字符。

    因此,如果我们想发送这个编码值,我们必须让它 uri 安全。我们可以在解码后使用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);
    

    【讨论】:

    • 执行第二个 Base64 编码步骤将删除一些可能的字符,从而使其 URL 安全,但这也会使您的数据再膨胀 30%,您需要发送和接收更多数据,并且需要更长的时间。
    • @ArtjomB。是的,目前我认为这是通过 URL 发送加密变量的唯一解决方案。你有更好的灵魂吗?
    • 我确实提供了一个可以解决问题的答案。你试过了吗?
    • @ArtjomB。我刚试过。结果惊人地短。什么是 strstr() 功能?
    • It 替换子字符串,它是 strtr 而不是 strstr
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    相关资源
    最近更新 更多