由于这个问题很受欢迎,我认为给它一个更新很有用。
让我强调AviD对这个问题 给出的正确答案:
您不应在 cookie 中存储任何需要加密的数据。相反,在 cookie 中存储一个大小合适(128 位/16 字节)的随机密钥,并将您希望在服务器上保持安全的信息存储在服务器上,由 cookie 的密钥标识。
我正在寻找有关加密 cookie 的“最佳”加密算法的信息。
我有以下要求:
它必须快速
加密和解密数据(几乎)每个请求都会完成它将在小型数据集上运行,通常是大约 100 个字符或更少的字符串
它必须是安全的,但这不像我们正在保护银行交易
我们需要能够解密信息,这样 SHA1 等就出来了。
现在我读到 Blowfish 既快速又安全,而且我读到 AES 又快又安全。Blowfish 具有较小的块大小。
我认为这两种算法都提供了足够的安全性?因此速度将成为决定性因素。但我真的不知道这些算法是否适合小字符串,以及是否有更适合加密 cookie 的算法。
所以我的问题是:
哪种加密算法最适合加密 cookie 数据?
更新
更准确地说,我们要加密 2 个 cookie:一个带有会话信息,另一个带有“记住我”信息。
该平台是 PHP 作为 VPS 上 Linux 上的 apache 模块。
更新 2
我同意cletus的观点,即在 cookie 中存储任何信息都是不安全的。
但是,我们需要实现“记住我”功能。公认的解决方法是设置 cookie。如果客户端提供此 cookie,则允许他或她以(几乎)相同的权限访问系统,就好像他/她提供了有效的用户名密码组合一样。
所以我们至少要加密 cookie 中的所有数据,以便:
a)恶意用户无法读取其内容,
b)恶意用户无法伪造或篡改自己的 cookie。
(在我们对它做任何事情之前,所有来自 cookie 的数据都经过清理并检查其有效性,但那是另一回事了)
会话 cookie 仅包含一个 sessionId/timestamp。它可能在没有加密的情况下使用,但我认为加密它没有害处?(计算时间除外)。
因此,鉴于我们必须在 cookie 中存储一些数据,加密它的最佳方法是什么?
更新 3
对这个问题的回答让我重新考虑选择的方法。我确实可以在不需要加密的情况下做同样的事情。我不应该加密数据,而应该只发送没有上下文且无法猜测的无意义的数据。
然而,我也不知所措:
我认为加密使我们能够将数据发送到 BigBadWorld™,并且仍然(相当)确定没有人可以读取或篡改它......
这不就是全部吗?加密点?
但下面的反应倾向于:不要相信加密来实现安全。
我错过了什么??