2011-03-05 62 views
2

我会保持这个简短。作为PHP的mcrypt库的一部分,有40多个可能的密码,see here什么是,如果有的话,首选mcrypt密码加密/解密php对象或阵列

不知道很多有关加密我自己,我的假设下工作,无论使用的密码,因为数据加密解密时的数据是相同的(否则有什么意义吗?)

我需要加密然后解密一个数组或序列化的标准对象。我在网上浏览了一些关于mcrypt库的基本实现的例子,并注意到每个例子都使用了不同的密码。这让我想知道这是否有任何意义,或只是个人喜好?

我的问题是,是否有这些密码我应该知道

  • 我会加密/解密是一个数组或序列化标准的对象被关注之间的任何显著的差异,含有相对少数据。
  • 此操作相当不常见,所以速度不是一个大问题,在< 2s范围内的任何地方都可以接受。
  • 加密字符串将需要存储在cookie中,并通过URL查询字符串传递(所以有在长度和字符集限制)

注意

我不是一个后有关我应该使用散列还是hmac的争论。加密是必要的,也是这个问题的正确选择。

回答

5

给定正确密钥的任何合理的密码在明文/密文之间进行加密/解密。

您选择的密码有很大差异。是块长度,密钥长度和/或一般安全性。例如,你不应该使用DES,因为它只使用56位密钥。与您列表中的其他密码类似,请参阅。在使用任何密码之前,请务必阅读并确定它是否适合您的上下文。

但我无法详细了解列表中的每个密码。 :-)

我个人喜欢AES(Rijndael),它采用三种尺寸的密钥128,192和256位。最有名的攻击比暴力攻击要快,但仍然不可行。它也很快(实际上英特尔在Westmere和Sandy Bridge包括AES的machine instructions)。

蛇和Twofish也是很好的密码。 Serpent在Rijndael中排名第二,Twofish在几年前的AES大赛中排名第三(我认为是)。

+1

我注意到与aes MCRYPT_RIJNDAEL_256的一件事是它生成非ascii字符。由于这将通过URL查询字符串传递,因此对于在一个Querty键盘上匹配字符的字符串(不确定这个字符集被称为什么)我感觉更加舒适。例如: ?0-6OB:L-%W ¤ò'½($¢bnƶÝJl>fbÕCìJ•îåžËP6àÖ‰UïûÊæTÿ,\t起来 “·kSAB·毫伏Z($àklÍpFó©ºÁ8åÊqŠ-ð.,ú&&μ'gÒM〜C:”!PSŠÉÐ'܃Êêú£0êùÃ܃õKfXƒ xzyfer 2011-03-06 12:45:35

+2

它只是返回字节。如果你愿意,你可以Base64编码,那么你就没有问题了。传输时如何表示加密数据是一个普遍的问题。 – 2011-03-06 12:53:28

+0

我设法解决这个使用base64编码/解码:) – xzyfer 2011-03-06 12:59:15