将数组加密为字符串

时间:2009-05-07 22:36:25

标签: php encryption

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

链接到某些东西就足够了,我似乎无法在谷歌上挖掘任何东西。也许我应该用一些不起眼的角色破坏数组,然后以某种方式加密它?我不确定用什么方法对它进行加密...它没有太安全,cookie数据不是 敏感。

哦......是的,加密算法应该让我使用密钥/盐。 mcrypt_encrypt似乎回馈了凌乱的长期结果,但也许我没有使用正确的密码。哪个是最简单的密码(产生短清洁字符串)?

7 个答案:

答案 0 :(得分:9)

serialize()会将您的信息从数组中获取到字符串 - 如果您只是想要混淆,则可以通过base64_encode()传递它 - 但不是安全性。

如果你想要一些安全性 - 请查看mcrypt和blowfish:blowfish example

关于mcrypt

  

警告此功能自PHP 7.1.0起已废弃。依靠   这个功能非常气馁。

答案 1 :(得分:6)

根据gnarf的回答,这应该可以解决问题:

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

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

以防万一其他人想要复制粘贴解决方案。

答案 2 :(得分:4)

使用serialize()将数组转换为字符串,并使用unserialize()将其转换回数组。它远远优于内爆和手动解析。对于简单的混淆(任何程序员都可以看到),您可以使用简单的base64编码,但是您应该真正查看mcrypt库以提供一些真正的安全性。

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

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

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

答案 3 :(得分:2)

我只是使用Blowfish然后崩溃encrypt或(为了那么安全)DES或其他......

答案 4 :(得分:1)

如果安全性无关紧要,请使用JSON对数组进行编码,然后使用字符串rot13; - )

答案 5 :(得分:0)

尝试对数组中的所有元素进行异或,将结果字符串存储在字符串中 - 与解密相反。

答案 6 :(得分:0)

如果它不需要是安全的,那么普通的base64或rot13可能值得一看。