MySQL和Codeigniter项目中数据的加密和解密

时间:2018-02-20 18:55:39

标签: php mysql encryption

之前我在没有加密的数据库中存储数据。但现在我需要加密现有数据以及新插入的数据。

所以我在这做了什么: 为了加密现有数据,我使用了AES_ENCRYPT()方法,

更新table设置poster_id = AES_ENCRYPT('海报',' Mykey');

工作正常,我可以使用AES_DECRYPT()方法解析数据。

在代码中,我做了以下更改:

$ config [' encryption_key'] =' Mykey&#39 ;; //在config.php页面中。

和使用

加密的值

$ encrypted_string = $ this-> encrypt-> encode($ poster_id);

这也正常,因为我能够加密新的数据库插入数据。

但是当我试图通过使用AES_DECRYPT()函数(现有数据和新插入的数据)来尝试解除所有数据时。我得到旧数据的正确值并获得新插入数据的Null值。 请在此建议或提供任何替代解决方案。

谢谢。

1 个答案:

答案 0 :(得分:0)

  

这就是我的工作:为了加密现有数据,我使用了AES_ENCRYPT()方法,

那是你出错的地方。

CodeIgniter的Encryption类不仅对数据进行裸AES加密。需要a lot of steps to protect against adaptive chosen-ciphertext attacks

  • HKDF-SHA256用于将密钥分为两个密钥(一个用于AES,另一个用于HMAC-SHA256)。
  • 数据使用随机IV通过AES-CBC(MySQL的AES_ENCRYPT()仅提供ECB)进行加密。
  • IV和密文已通过HMAC-SHA256进行了身份验证。

它们彼此根本不兼容,正确实现的是CodeIgniter,而不是MySQL。您需要CodeIgniter的设计。