128位PHP加密&数据解密


128-bit PHP Encryption & Decryption of Data

我有一个客户端,他要求MySQL数据库中存储的所有数据都使用128位加密。

假设在将所有数据插入数据库之前,运行一个PHP函数对其进行加密。然后,当我从数据库中提取数据时,我运行一个解密函数以输出原始文本/信息。

谁能给我指个正确的方向?我知道这些功能将使用共享/通用密钥来加密和解密,但它为什么是128位的?PHP中有这样的预构建函数吗?

谢谢大家的建议。

斯科特

通常,"128位加密"是指使用128位密钥的对称加密。AES-128是一个很好的加密算法选择。

您还需要选择一种操作模式:如果您只需要隐私,CBC, CFB, OFB和CTR都是不错的选择,但如果您还想保护数据免受篡改,则应该使用经过身份验证的加密模式,如EAX。除非您的所有记录都短于单个AES块(也是128位),否则不要使用ECB模式,即使它们短于单个AES块(也是128位),最好也不要。

根据您选择的模式,您通常还需要为每个记录生成一个初始化向量(IV),它应该是一个唯一且不可预测的随机密码块(AES为128位)。生成伪随机数的方法有很多,但有两种很好的方法(NIST推荐),要么使用加密安全伪随机数生成器的输出,要么在ECB模式下加密唯一ID(这是可以使用的罕见情况之一)。根据您正在使用的加密库,它可能会为您处理此问题。请注意,如果您更改了记录中的加密数据,您也应该更改IV。

正如其他答案所指出的,如果您正在使用PHP,那么mcrypt是加密库的一个很好的选择。

我希望这是你的解决方案。参考页面上的两个函数encryptdecrypt,并抓住思想

是。您需要研究用于加密的类/API,其中必须提到这一点。它们也依赖于你使用的算法。请点击此链接了解更多信息。这里有一个关于加密的简短解释。您可以在这里找到示例代码,但更推荐使用mycrypt