【发布时间】:2020-08-20 13:49:00
【问题描述】:
我正在寻找加密 MySQL 表中的一些字段,并在此处的另一篇文章中遇到了 CipherSweet。它看起来很棒,我已经安装了它并启动了引擎,但我似乎无法离开车道...... 我不是 PHP 专家,这可能是问题的一部分——这些说明似乎假设的知识比我所拥有的要多得多。
我有一个表单可以传递我想要加密的数据(姓名、电子邮件等)——我的代码在这方面有效,我将它们转换为我以前用来成功写入数据库的变量。
$UserName = test_input($_POST["UserName"]);
$FirstName = test_input($_POST["FirstName"]);
$LastName = test_input($_POST["LastName"]);
$email = test_input($_POST["email"]);
我的问题是,我如何加密除用户名之外的行中的所有内容?我正在使用他们的设置示例,但现阶段不需要任何盲索引。
use ParagonIE\CipherSweet\Backend\ModernCrypto;
use ParagonIE\CipherSweet\CipherSweet;
use ParagonIE\CipherSweet\KeyProvider\StringProvider;
use ParagonIE\CipherSweet\EncryptedField;
use ParagonIE\CipherSweet\EncryptedRow;
$provider = new StringProvider(
// Example key, chosen randomly, hex-encoded:
'yaddayadda....'
);
$engine = new CipherSweet($provider);
$row = (new EncryptedRow($engine, 'contacts'))
->addTextField('UserName')
->addTextField('FirstName')
->addTextField('LastName')
->addTextField('email');
$prepared = $row->prepareRowForStorage([
'UserName' => 'User1',
'FirstName' => 'UserFirstName',
'LastName' => 'UserLastName',
'Email' => 'UserEmail'
]);
var_dump($prepared);
此时,我让它工作了——我假设 var 转储正在将看起来像加密字段的内容写入屏幕。但是,我不知道如何使用 SQL 语句将数据导入数据库。数据“看起来”是什么样的?我在 EncryptedRow 之后放置表格名称的位置是“联系人”吗? prepareRowForStorage 实际上做了什么?
正如我所说,CipherSweet 看起来很棒,但我无法完全连接所有的点!
谢谢
卡鲁姆
【问题讨论】:
-
您要加密哪些字段以及要使用哪些字段进行查找?为您要加密和执行查找的字段创建盲索引。
-
我的计划是加密除用户名字段之外的所有字段;我不需要任何盲目查找,因为我不需要搜索任何字段,并且我希望加密尽可能多的数据。我会在需要时返回每个用户名的所有记录。
-
所以你确实需要通过用户名查找。只需为用户名创建一个盲索引。
-
即使我添加了盲索引,我仍然无法正常工作——我不知道如何以 CipherSweet 返回的格式将数组中的数据获取到数据库中。请问有什么想法吗?
-
只是想知道是否有人能帮忙解决这个问题?
标签: php mysql encryption