在PHP中加密非常短的字符串的最佳方法是什么?

Sha*_*obe 12 php encryption

我想加密字符串,这些字符串可能只有大约三个或四个字符,但运行到大约二十个字符.散列函数(md5,sha1,crypt等)不适合,因为我也希望能够解密信息.该mcrypt的扩展有一个可能性的彻底艰巨的阵列.

有没有人对安全加密短字符串的最佳方法有什么想法?为什么?有没有人有任何关于将休闲程序员引入实际加密方案的材料的链接?

pda*_*vis 6

我喜欢将GnuPG用于需要在服务器上加密然后在服务器或其他服务器上解密的任何东西(通常是我的情况).这允许额外的安全级别,因为在我的场景中加密服务器没有解密数据的密钥.它还允许更容易的手动解密.有一些好的包装器可用于各种语言(另一个优点),一个用于PHP的是GnuPGP PHP Class.


Nic*_*son 6

默认情况下,mcrypt链接到PHP的大多数版本中.它包含您可能需要的所有原语.在不了解您正在加密的内容,您的威胁模型等等的情况下,很难就使用何种算法,操作模式等提出具体建议.

有一点我可以肯定地说:对于短文本字符串,必须使用独特的随机初始化向量比以往任何时候都重要.否则,某人对加密数据进行各种攻击是微不足道的.


小智 4

我强烈推荐Chris Kite的建议。如果不了解您正在做什么、为什么以及您预计需要防范 AES-128 的威胁,则可能就足够了。使用对称加密的能力对于既是数据解密器又是数据加密器的独立应用程序来说非常有用。正如Chris KiteArachnid所说,由于数据规模较小,建议您填充数据并使用随机初始化向量。

更新:至于为什么......如果数据足够小,并且可以预测 IV,则可以通过为纯文本与已知 IV 的每种组合生成密文并进行匹配来暴力破解纯文本直到捕获的密文。简而言之,这就是彩虹表的工作原理。

现在,如果您要在一台服务器上加密并在另一台服务器上解密,我会采纳pdavis的建议。通过使用非对称方法,您可以将加密密钥与解密密钥分开。这样,即使加密数据的服务器遭到破坏,攻击者仍然无法解密数据。

如果可以的话,它将帮助社区更多地了解您的加密用例。正如我上面提到的,在评估安全控制时,正确理解可能的威胁是关键。