mysql - 对加密列进行排序有哪些不同的方法?

标签 mysql sorting encryption

<分区>

我在 MySQL 中有一个 AES 加密列,我想对其进行排序并对结果进行分页。

我遍历每一行并将其添加到数组中。然后我对数组进行排序。对于 > 10K 行,这变得非常慢。

我正在考虑添加一个额外的列并添加从 0-##### 开始的顺序,但我看到的问题是每次在中间插入一行时我都必须更新顺序。

如果有人有这方面的经验,我只是想集思广益。

谢谢

最佳答案

架构

-- drop table encryptIt;
create table encryptIt
(   id int auto_increment primary key,
    ciphertext blob not null
);

按原样从 PHP 加密到它,或参见 This answer .

现在是时候直接从 mysql 分页了,无需 PHP 循环和排序。假设您将 secret your_key 提供给 mysql。假设您可以获得基本的计数,因此知道您的页数(每页 25)。

SELECT id,CAST(AES_DECRYPT(ciphertext,'your_key') AS CHAR) AS cleartext
FROM encryptIt
order by cleartext
limit 0,25; -- start at first block of 25, bring back 25
-- limit 2,25; -- start at 3rd block of 25, bring back 25

使用 order by 和 limit 应用正常分页。

遵循最佳实践的 key 管理。一个模糊的评论,但我把它扔在那里。

关于mysql - 对加密列进行排序有哪些不同的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33838370/

相关文章:

c++排序算法难度与数组长度

ssl - 强制使用 ECDHE 密码的 SHA256 服务器证书

mysql - 在 MySQL 中使用一些 JSON 列加载查询得到 {无效的 JSON 文本 : "Invalid value." at position 0 in value for column }

mysql - 如何重写我的 MySQL 更新语句以消除 "Truncated incorrect INTEGER value"警告?

mysql - sql分组时选择行

c++ - 按字符串C++对存储在 vector 中的对象进行排序

mysql - UNIQUE SQL 索引是否也用于加速搜索?

c++ - 排序比较函数可以是成员函数上的指针吗?

javascript - JavaScript 中的 TEA 加密

android - 是否可以从现有的内存块创建内存中的 SQLite 数据库?