CakePHP读取加密的cookie值

CakePHP读取加密的cookie值,php,cakephp,cookies,encryption,Php,Cakephp,Cookies,Encryption,我设置cookies如下: $this->Cookie->write('mycookie', $data, TRUE, '30 days'); $cookieData = $this->Cookie->read('mycookie'); $cookieRaw= $_COOKIE['CakeCookie']['mycookie']; 我是这样读的: $this->Cookie->write('mycookie', $data, TRUE, '30 days

我设置cookies如下:

$this->Cookie->write('mycookie', $data, TRUE, '30 days');
$cookieData = $this->Cookie->read('mycookie');
$cookieRaw= $_COOKIE['CakeCookie']['mycookie'];
我是这样读的:

$this->Cookie->write('mycookie', $data, TRUE, '30 days');
$cookieData = $this->Cookie->read('mycookie');
$cookieRaw= $_COOKIE['CakeCookie']['mycookie'];
但出于安全考虑,我读了一些类似这样的cookie:

$this->Cookie->write('mycookie', $data, TRUE, '30 days');
$cookieData = $this->Cookie->read('mycookie');
$cookieRaw= $_COOKIE['CakeCookie']['mycookie'];
我把这个原始cookie写入我的数据库。然后我需要阅读cookie的内容

但正如您所知,原始cookie类似于“Q2FrZQ=dsdsdadsa”。
所以我需要阅读cookie的内容


似乎
CookieComponent:read()
使用了受保护的
CookieComponent:\u decrypt
函数。我不想复制粘贴_decrypt()内容。有没有更简单的方法来读取解密的CakePHP字符串?

如果需要存储加密的数据,我建议您自己加密,而不是依赖cookie组件内部

也就是说,使用cookie组件读取cookie数据,最终得到解密的数据,然后使用您最喜欢的加密算法(我建议使用)对其进行加密,并将其存储在数据库中,这样您就可以对数据进行适当的控制

另一个选项是创建一个自定义组件,扩展cookie组件并公开解密功能。然而,我真的不认为这是一个好主意,数据库中的数据不应该是一个组件问题,这是一个更适合模型层的东西

如果您坚持使用mundged cookie数据并手动解密,那么您必须执行与
CookieComponent
代码中相同的操作。首先从数据中剥离
Q2FrZQ=.
,然后base64解码,然后根据cookie组件使用的方法对其解密(
Security::cipher()
,默认情况下,这是不推荐的),最后JSON解码(如果需要),如
CookieComponent:\u explode()
中所述

假设只使用Cake 2.x样式的cookie数据,并且预期数据总是加密的,那么可以将其分解为以下内容(其中可能需要调整解密方法,具体取决于cookie组件配置):


然而,这在很大程度上依赖于cookie组件的内部结构和配置,因此,这不是推荐的

我看不出不使用CookieComponent的原因,为了向您提供信息,该组件会加密您编写的任何内容。这里是文档的摘录

默认情况下,cookie中的所有值都是加密的。如果要将值存储为纯文本,请将write()方法的第三个参数设置为false。对cookie值执行的加密是一个相当简单的加密系统。它使用Security.salt和预定义的配置类var Security.cipherSeed来加密值。为了使cookie更安全,您应该在app/Config/core.php中更改Security.cipherSeed,以确保更好的加密:


我没有得到你的关注,为什么你认为使用Cookie组件是不安全的?Cookie组件不是不安全的。我发现在没有加密的情况下将cookie内容写入数据库是不安全的。所以我将加密字符串保存到数据库中。我更喜欢默认的CakePHP行为。因为那会增加我的复杂性。。解密cookie的最小代码是什么?看起来Cookiecomponent first base64_解码并使用密码方法?有时,正确的方法需要更复杂的东西,尽管我认为它实际上不那么复杂(即使它需要更多的代码),因为它不需要处理cookie数据格式所需的hocuspocus。不管怎样,请查看我的更新答案。谢谢您的代码片段和rijndael推荐。它们都像一个符咒,我默认用cookie组件加密。问题是在没有->cookie->read()的情况下读取cookie,为什么在没有CookieComponent::read()的情况下读取cookie?正如我在问题中提到的,我将加密cookie写入DB。当我需要数据时,我无法使用CookieComponent::read()读取数据