我一直在使用openssl函数在php中使用AES-256-CBC加密数据。我已经能够使用每个新加密的唯一IV(通过openssl_random_pseudo_bytes生成)对其进行加密。
但我正在努力解决使用aes cbc进行身份验证加密的想法。当我要解密数据时,我如何基本验证?
我需要使用像PBKDF2,blowfish或hash_hmac()这样的东西吗?
我是否需要以某种方式散列密钥?
非常感谢任何帮助。
答案 0 :(得分:1)
简单的解决方案,使用可用于php和许多其他语言的RNCryptor。有关实施细节,请参阅此ReadMe。
即使您不使用RNCryptor,这些方法也是正确且安全的。
网站上的一些细节:
答案 1 :(得分:1)
但我正在努力解决使用aes cbc进行身份验证加密的想法。当我要解密数据时,我如何基本验证?
使用随机IV加密数据后,使用第二个密钥将密文和IV放入hash_hmac()
。
如果您因为需要部署到生产中而要求,请等到defuse/php-encryption的第2版发布后再使用它。 (它的AES-256-CTR不是AES-256-CBC,但CTR模式的攻击面比CBC模式少;即如果你击败了HMAC,就没有填充oracle攻击。)
RNCryptor不是根据cryptography coding standards编写的,既不在PHP也不在Python。
RNCryptor字面上violates rule 1 of the cryptography coding standards始终如一。可能还有其他尚未发现的问题。如果您希望跨语言移植,use libsodium。