2017-10-10 90 views
3

查询描述:假设我有一个数据库表,它以加密形式存储所有用户的数据。我有一个管理员可以搜索用户数据的功能。现在问题是,管理员将在文本框中输入正常文本,并且必须根据管理员的输入过滤用户列表(在每次文本更改时)。与此同时,我有一些加密形式的数据,我必须根据Admin输入的正常文本进行过滤。关于MySQL中加密数据的搜索过滤器

我到现在为止提出的解决方案是,我首先解密所有数据,然后应用过滤器。但是我很想知道,如果我的数据库中有数百万条记录,那么现在的方式似乎是无用的和低效的。

任何人都可以帮助我以最有效的方式搜索加密数据吗?

任何帮助将不胜感激!

谢谢。

+2

https://dba.stackexchange.com/questions/23908/how-to-search-a-mysql-database-with-encrypted-fields这可能会帮助你 –

+0

加密关键字 – mewc

+0

@mewc:加密值可能不同对每一个文本的改变。 –

回答

0

我到现在为止提出的解决方案是,我首先解密所有数据,然后应用过滤器。但是我很想知道,如果我的数据库中有数百万条记录,那么现在的方式似乎是无用的和低效的。

你是对的,这不是一个可扩展的解决方案。如果您想深入了解此问题,请参阅:Building Searchable Encrypted Databases with PHP and SQL

你想要做的是:

  1. 存储加密数据,不被使用认证加密
  2. 将明文密码与密文一起存储
    • 盲指数可以HMAC-SHA256(plaintext, separate_key)
    • 敏感值应使用sodium_crypto_pwhash()hash_pbkdf2()代替。
    • 为了节省空间,请截断盲目索引并将其视为Bloom过滤器。

这给你两全其美:抵抗被动和主动攻击数据加密,同时也允许在快速SELECT查询使用。