首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持加密数据库字段中部分字符串匹配的安全方法

支持加密数据库字段中部分字符串匹配的安全方法
EN

Stack Overflow用户
提问于 2014-03-19 05:54:37
回答 1查看 742关注 0票数 2

我正在编写一个使用PHP + MySQL的web应用程序。我知道PHP和MySQL都可以执行数据加密。我还读到,在PHP级别加密数据在安全性方面更为可取。但是现在我面临这个问题:我想加密一些用户数据的地址字段。但是在使用PHP编写的网页中,我想支持地址字段的部分字符串匹配。我目前的解决方案是加密MySQL级别的数据,然后执行如下搜索:

代码语言:javascript
复制
// PHP code for inserting data into database
mysql_query("INSERT INTO test VALUES ('', AES_ENCRYPT('" . $addr . "', UNHEX('" . $hexstring . "')))", $link);

// PHP code for partial string matching
mysql_query("SELECT * FROM test WHERE AES_DECRYPT(address, UNHEX('" . $hexstring . "')) like '%Street%'", $link);

是否有更安全的方法在PHP级别而不是MySQL级别执行加密?我能想到的是检索所有记录,解密PHP中的数据并执行匹配,但这将非常缓慢。AES不是必须的,只要它足够安全,任何加密/解密方法都是可以的。

EN

回答 1

Stack Overflow用户

发布于 2017-12-29 22:51:39

我想加密一些用户数据的地址字段。但是在使用PHP编写的网页中,我想支持地址字段的部分字符串匹配。

这是加密数据库的困难所在。你必须在两者之一中做出选择:

  1. 实验性的学术设计,如秩序揭示加密,缺乏我们通常期望的数据加密时的语义安全性。
  2. 使用盲指标与布卢姆滤波器认证加密。

如果您希望采用后一种方法(我愿意),则这个过程有些简单:

  1. 为希望支持的每个部分匹配生成一个单独的键。
  2. 创建一个函数,确定地将明文转换为预散列消息(例如,街道号码和道路名称的首字母(123 Main Street,=>,123m,等等)。
  3. 在步骤2的输出上使用安全的键控哈希结构(如hash_hmac()hash_pbkdf2() )。
  4. (可选):将步骤3的输出截断为少量字节(例如,8个十六进制字符)。这意味着搜索结果中会出现更多的错误,但是从访问数据库服务器的对手那里可以了解到关于您的纯文本的独特的区别事实。
  5. 将其存储在密文旁边,密文本身应该是安全加密

当然,如果您的加密密钥存储在与数据库服务器相同的硬件上,所有这些都是徒劳的。能够访问数据库(例如SQL注入)的攻击者可以逃到文件系统并窃取密钥,除非the服务器和数据库位于单独的硬件上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22497427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档