【问题标题】:Full table search and data encryption全表搜索和数据加密
【发布时间】:2011-05-11 10:06:46
【问题描述】:

我在 vb6 和 mysql 中开发了一个客户端软件。这是桌子

CREATE TABLE IF NOT EXISTS `main_table` (
    `f_id` int(11) NOT NULL DEFAULT '0',
    `id` mediumint(15) NOT NULL AUTO_INCREMENT,
    `text_to_encrypt` mediumtext
    PRIMARY KEY (`id`),
    KEY `f_id` (`f_id`)
);

客户端希望数据被加密的 text_to_encrypt 列。现在加密数据很容易,但真正的问题是它可以完全文本搜索到用户提供的关键字,并在解密加密数据后显示数据。该专栏大约有 900,000 条,而且还会增加,我想要 Windows 操作系统的解决方案。怎么办?

【问题讨论】:

    标签: mysql vb6 encryption


    【解决方案1】:

    如果客户是决定如何某事应该表现的人,那么客户知道您无法在不解密的情况下使用关键字搜索加密数据。

    这意味着获取表的全部内容,解密然后搜索。

    【讨论】:

    • 是的,但是如果我每次都解密表然后搜索然后删除解密的表将花费很多时间,因为不可能在短时间内解密大记录。
    【解决方案2】:

    您可以考虑对所有要搜索的文本内容进行加密和索引。如果文本是“Hello world!”您将保存加密的“hello”和“world”,然后搜索那些在写入初始记录时已映射到加密文本字段的内容。

    【讨论】:

    • 假设没有滚动加密、盐或类似的加密,使其成为非常弱的加密。每个单词每次都必须加密为相同的字符串,这意味着它只不过是 ROT 加密。
    • 这是一个公平的观点。像这样的东西,用盐怎么办?我们遇到了与 OP 类似的问题,并且正在考虑采用我提出的方法。下面是用于在输入过程中加密字符串的算法: $salt = self::getSalt(); $字符串=修剪($字符串); $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($size, MCRYPT_RAND); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $salt, $string, MCRYPT_MODE_ECB, $iv);返回 bin2hex($加密);感谢您的反馈。
    【解决方案3】:

    无法搜索加密的 COLUMN。

    如果要求只是对数据进行加密,你考虑过Transparent Database Encryption (TDE)吗?

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2016-02-28
      • 2021-01-14
      • 2010-11-16
      相关资源
      最近更新 更多