【问题标题】:Encryption and Decryption of data in MySQL and Codeigniter projectMySQL和Codeigniter项目中数据的加密和解密
【发布时间】:2018-07-31 05:36:43
【问题描述】:

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

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

更新table SET poster_id = AES_ENCRYPT('poster','Mykey') ;

它工作正常,我可以使用 AES_DECRYPT() 方法对数据进行解密。

在代码中我做了如下更改:

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

并使用

加密值

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

这也很好,因为我能够加密新的插入数据到数据库。

但是,当我现在尝试使用 AES_DECRYPT() 函数(现有数据和新插入的数据)对所有数据进行解密时。我正在为旧数据获取正确的值,并为新插入的数据获取 Null 值。 请就此提出建议或提供任何替代解决方案。

谢谢。

【问题讨论】:

  • 您的新的基于 PHP 的加密不起作用。但是,很难说出原因,因为您没有发布任何实际代码。
  • AES_DECRYPT 如果检测到无效数据,则返回NULL。听起来 codeigniter 生成了错误的加密
  • 为什么你认为$this->encrypt->encode()和mysql的AES_ENCRYPT是一样的?
  • 是的,两者都不相同。那么您能提出什么解决方案。

标签: php mysql encryption


【解决方案1】:

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

那是你出错的地方。

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

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

它们只是彼此不兼容,正确实现的是 CodeIgniter,而不是 MySQL。你想要 CodeIgniter 的设计。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多