2

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

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

有人可以指出我正确的方向。我知道这些功能将使用共享/公共密钥来加密和解密,但是是什么使它成为 128 位?PHP中是否有执行此操作的预构建函数?

感谢任何建议。

斯科特

4

3 回答 3

1

通常,“128 位加密”是指使用 128 位密钥的 对称加密。AES -128 是加密算法的绝佳选择。

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

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

正如其他答案所指出的,如果您使用 PHP , mcrypt是加密库的不错选择。

于 2013-01-08T06:50:22.603 回答
1

我希望是您的解决方案。在页面上引用两个函数encryptdecrypt抓住这个想法。

于 2013-01-08T04:05:54.433 回答
1

是的。您需要研究他们必须提到的用于加密的类/API。它们还取决于您使用的算法类型。请点击此链接了解更多信息这是关于加密的简要说明。您可以在此处找到代码示例,但更推荐使用mycrypt

于 2013-01-08T04:11:30.087 回答