哪个PHP mcrypt密码最安全?

Ind*_*ial 27 php security encryption mcrypt

那么伙计们,有很多不同的密码可供使用 - 但现在哪一个最安全?

列表:http://www.php.net/manual/en/mcrypt.ciphers.php

Tho*_*nin 46

如果不确定使用带有128位密钥的AES(也称为"Rijndael").如果你已经开发出某种关于密钥大小的迷信,那么你可以通过选择更大的密钥来满足你的非理性条件,例如192或256位; 额外的成本并不高(AES-256的工作负载为+ 40%,与AES-128相比,实际上需要一个非常快速的网络来观察这种差异).

请注意,无论选择何种密钥大小,AES的正确mcrypt密码始终是MCRYPT_RIJNDAEL_128.这是因为AES标准指的是具有128位块大小的Rijndael密码的风格.如果需要AES-256,则需要使用MCRYPT_RIJNDAEL_128256位(32字节)密钥,而不是MCRYPT_RIJNDAEL_256.

AES于1998年出版,并于2001年被美国政府采纳为联邦标准,现在没有出现任何弱点.后来发现了一些数学属性,但它们并没有影响实际的安全性; 大多数情况下,他们强调我们对AES安全的原因有一些相对准确的了解.没有任何其他对称加密算法能够获得比AES更多的关注(成千上万的有才华的密码学家).

大多数安全问题来自加密算法的使用方式,而不是算法本身.使用正确的链接模式,添加MAC,管理填充,并且大多数都安全地处理密钥.如果你把所有这一切都弄好了(这比它看起来要棘手得多)那么就是时候担心选择Rijndael,Twofish等等.

  • 关于如何使用分组密码的完整课程将远远超过我的耐心,以及许多读者的耐心.我的信息是:1.回答所提出的确切问题,并且:2.让请求者认为问题很复杂,不应轻易解决.在我看来,带有加密消息的随机IV编码的CBC模式和HMAC"足够正确".CMAC只是一个MAC; 对于结合加密和MAC的高级模式,查找GCM(伽罗瓦/计数器模式). (7认同)

小智 5

除了Thomas Pornin的出色答案之外,您还必须考虑您在"安全性"(机密性/完整性/真实性/可用性)方面要实现的目标.

对于每个案例,您都需要解决几个问题,例如......这适用于哪些人?它在哪里以及为什么被使用(你在保护什么)?这意味着持续多久?等等

例如,当数据实际上仅持续20-30分钟时,对于256位操作的完全连续加密会话数据可能没有意义.一个安全的128位算法将接近两倍的速度,或至少使用较少的时钟周期,并且就像(如果不是更多)安全一样.

使用弱密钥方法加密意味着持续很长时间的东西(如机密文档或文件,私钥等......)也没有意义.您有时需要多种算法,并进行某种身份验证并正确使用填充.我根据客户要求使用多种算法(主要是twofish,AES,RSA)定期加密和签名内容.

不要忘记(就像托马斯指出的那样),你可以不安全地实施一种安全的方法(或方法).由于每个公式的大量变体等等,实际实现"安全"的东西可能很棘手.

通常,某些东西与解锁它的关键一样安全.如果我将汽车钥匙留在汽车中并且汽车已解锁,则钥匙不安全且任何走过的人都可以打开.具有良好分散的32个字符键的Blowfish将与今天的其他任何东西一样安全.然而,一个3字符的键可以在眨眼之间被打破.