php - 加密题

标签 php mysql codeigniter encryption cryptography

asked a question here我设法部分实现了建议。在我删除 aes-256 加密并保留 aes-128(默认)codeigniter 加密后,数据现在加密存储在二进制字段 (varbinary(500)) 中。

但是,我有一些问题,我找不到答案,因为我找不到很多关于这个主题的文章,所以如果有人能回答我的问题,或者给我指一本书,或者任何其他文献以进一步了解阅读,我将不胜感激。

  1. 为什么加密后的数据必须存储在二进制类型字段中?将它存储在 longtext 或 varchar 中有什么问题?这会使加密变得毫无值(value)吗?

  2. 为什么二进制类型的字段存储数据时必须先对变量进行编码再加密,而varchar字段存储数据则不必这样做?

    base64_encode($clientName);
    
    $encClientName = $this->encryption->encrypt($clientName);
    
  3. 在我之前的问题(见顶部的链接)中,有人建议我使用 nonce。因为我不知道如何将它与 codeigniter 库一起使用,所以我没有实现那部分。这会降低我的数据安全性吗?任何人都可以发布任何关于如何将 nonce 与 codeigniter 一起使用的代码片段吗?

同样,我们将不胜感激有关此主题(使用 php 在数据库中存储加密数据)的阅读 Material 的任何链接。

最佳答案

Why encrypted data must be stored in binary type field? What is wrong with storing it in longtext, or varchar? Does that make the encryption worthless?

加密数据是二进制的。它经常包含在您的文本编码中无效的字节序列,使它们无法插入需要字符串的列(如 VARCHAR 或 TEXT)。

您可能需要的数据类型是 VARBINARY(类似于 VARCHAR,但不是字符串)或 BLOB(同样,但对于 TEXT——还有 MEDIUMBLOB、LONGBLOB 等)。

Why I must first encode the variable and then encrypt it when I store the data in the binary type of field, and I don't have to do that when I store the data in varchar field?

你不知道。这是倒退。

如果您要使用字符串类型的列来存储加密数据,您可以通过 Base64 对数据进行“伪造” 加密。但是,您最好还是使用二进制类型的列,此时您不需要任何额外的编码。

In my previous question (see the link on the top) I have been advised to use nonce. Since I didn't know how to use that with codeigniter library, I didn't implement that part. Does that make my data less secure?

根据我在文档中看到的内容,我认为 CodeIgniter Encryption 库默认会为您处理此问题。您不应该做任何额外的事情。

关于php - 加密题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751861/

相关文章:

mysql - 查看mysql上的个人记录

mysql - SQL:每个字段值计数的输出表

javascript - 下拉菜单默认选择从数据库值中选择

PHP:函数迭代另一个函数的结果并输出

javascript - 在 MediaWiki 用户 JavaScript 中添加自定义按钮

mysql - codeigniter - 如果 ip 超过 x 次尝试,则阻止 ip

mysql - codeigniter 将日期应用于字段名称(时间戳)并与年份进行比较

php - 为什么数据不能正确传递 codeigniter 模型

php - 如何从 Bootstrap Modal 表单获取值?

php - Magento:检测管理员是否登录到前端页面