Php 将数组加密为字符串

Php 将数组加密为字符串,php,encryption,Php,Encryption,我正在寻找一种双向加密算法,将数组编码为字符串,这样我就可以在cookie中安全地存储一些数据。该算法不应该只是内爆数组,我希望它也被混淆。我的数据包含所有可打印字符 一个链接就足够了,我只是在谷歌上找不到任何东西。也许我应该用一些模糊的字符对数组进行内爆,然后以某种方式对其进行加密?我不知道该用什么方法加密。。。它不太安全,cookie数据没有那么敏感 哦。。。是的,加密算法应该允许我使用密钥/盐。mcrypt_encrypt似乎返回了杂乱的长结果,但也许我没有使用正确的密码。哪种密码最简单(

我正在寻找一种双向加密算法,将数组编码为字符串,这样我就可以在cookie中安全地存储一些数据。该算法不应该只是内爆数组,我希望它也被混淆。我的数据包含所有可打印字符

一个链接就足够了,我只是在谷歌上找不到任何东西。也许我应该用一些模糊的字符对数组进行内爆,然后以某种方式对其进行加密?我不知道该用什么方法加密。。。它不太安全,cookie数据没有那么敏感


哦。。。是的,加密算法应该允许我使用密钥/盐。mcrypt_encrypt似乎返回了杂乱的长结果,但也许我没有使用正确的密码。哪种密码最简单(生成干净的短字符串)?

如果安全性不重要,请使用JSON对数组进行编码,然后旋转字符串;-)

尝试对数组中的所有元素进行异或运算,将得到的字符存储在字符串中——解密时的顺序相反。

如果不需要安全,那么可以查看纯base64或rot13。

我只需使用Blowfish或(为了安全起见)内爆即可DES或其他东西…

会将您的信息从数组转换为字符串,如果您只想进行模糊处理,则可以传递它,但不需要安全性

如果你想要一些安全措施,请调查mcrypt和河豚:

关于

警告:自PHP 7.1.0起,此函数已被弃用。依靠 这个功能是非常不鼓励的

用于将数组转换为字符串,并取消序列化()将其转换回数组。它远远优于内爆和手动解析。对于简单的模糊处理(任何程序员都能看穿),您可以使用简单的base64编码,但您确实应该查看库以提供一些真正的安全性

最好的办法可能是根本不将数组存储在cookie中。而是将数组存储在会话变量中,以便用户所看到的都是会话ID。当然,只有在会话期间需要数组时,这才有效

你在评论中说这是为了“记住我”cookie,所以这是关于身份验证的。在这种情况下,不要在数组中存储任何敏感信息。只需储存一份盐腌土豆条,然后使用它。例如,您的cookie可以包含用户名和附加哈希(数据库密码哈希+ip地址范围)。当用户访问站点时,读取cookie并根据数据库中的信息构造哈希。如果它与cookie中的哈希匹配,则自动让他登录。如果没有,删除cookie并假装它从未存在过


这样,cookie中就不会存储敏感数据,您也不需要对其进行加密。

根据gnarf的回答,这应该可以做到:

function encode_arr($data) {
    return base64_encode(serialize($data));
}

function decode_arr($data) {
    return unserialize(base64_decode($data));
}

以防其他人需要复制粘贴解决方案。

不要将加密数据存储在cookie中。如果您必须在两个网站之间共享数据,请在cookie中存储一个id,并让另一个网站使用用户名和密码(使用curl)请求数据。我存储的只是一个id和一个密钥,这样用户就不会伪造cookie。我对它进行模糊处理只是为了更好的测量,所以他们甚至不知道我在存储什么。模糊处理和加密是完全不同的。你想要哪一个?我更喜欢加密,但如果它执行起来很昂贵,或者实施起来很麻烦的话,我就不喜欢了。如果安全性不重要,为什么要麻烦加密?@TwentyMiles,因为问题最初提到:-)这不是一个大问题,因为我也在采取其他安全措施,这应该很难做到。另外,我不会在我的网站上存储任何机密信息。。。事实上,我存储的不仅仅是一个用户id。$str=introde('abc',array('1','2','3'));//$str=>“1abc2abc3”谢谢。。。我甚至不认为这是一个实际的函数名,否则我会搜索它!我想这是一个我没听说过的复杂计划…内爆真是个坏主意。如果数组中的任何元素包含与你用来内爆的相同的“胶水”,那么当你试图将字符串分解回数组时,就会出现问题。这就是我担心的Seb。。这就是为什么我试图使用一些愚蠢的字符,比如“\x1F”。试试serialize(),这就是我一直使用的;它工作得很好;)这不是一个问题:我用它来“记住我”饼干。我知道这是一个古老的问题,一个古老的答案,但是,作为一个建议的任何搜索者遇到这一点,你可能想考虑使用,而不是在这个答案链接到BuloF鱼的例子。OpenSSL为许多加密算法(包括Blowfish和AES)添加了内置支持。此外,虽然安全性不是OP的一个大问题,但AES通常被认为比河豚更安全,因此它是更好的选择。