美文网首页
自定义开发-加密数据查询

自定义开发-加密数据查询

作者: CoderInsight | 来源:发表于2022-10-28 15:18 被阅读0次

1,加密数据的查询

(1),基础查询

以加密电话号码为例,可以选择的方式:

  • 第一种方式:在写sql语句的时候,通过自定义的解密函数实现对应的数据的解密,从而实现数据的比对。比如可以使用AES加密算法,但是注意在这个场景下:在where条件中运用了函数的运算解密操作,不会走索引;另外Innodb表的索引长度与单列的长度有关,如果是组合索引的话,则组合索引长度最大为:列数*255( name1(255),name2(255),name3(255)),其中对应单列索引长度最大为255。
-- 加密方法:value为需要加密的明文,当然也可以是表中某一列的名称,key为加密使用的密钥
AES_ENCRYPT(value,key)
-- 解密方法:value为需要解密的密文,可以为解密的密钥
AES_DECRYPT(value,key)
  • 第二种方式:创建一个单独的列,用于保存电话号码明文,然后在电话号码的Hash列(通过MD5实现散列)上建立索引;在查询的时候,先将电话号码的明文计算hash值(MD5值),根据hash值(MD5值)去匹配到对应的行即可。
    详细的步骤:
    • 添加Hash列:person_hash
    • 初始化Hash列数据:update person set person_hash = md5(AES_DECRYPT(person_name_aes,"key"))
    • 构建Hash列索引:ALTER TABLE person ADD INDEX idx_person_name_hash (person_hash):
    • 新增数据行;

(2),模糊查询

通过对密文数据进行分词组合,将分词组合的结果集分别进行加密,然后存储到扩展列,查询时通过key like '%partial%';但是,一般情况下要满足大于4位英文字符(半角),2个中文字符(全角),然后才可以做为一个检索条件。
wingyu2使用4个字符为一组的加密方式,第一组wing ,第二组ingy ,第三组ngyu ,第四组gyu2 … 依次类推。
如果需要检索所有包含检索条件4个字符的数据比如:ingy ,对该字符串加密之后后通过 key like “%partial%” 查库。
我们都知道加密后长度会增长,增长的这部分长度存储就是我们要花费的额外成本,典型的使用成本来换取速度。

补充:

1,Hash散列算法

Hash散列算法可以通过类比人的指纹来理解,它可以是一个文件的“指纹”,那么我们就可以通过Hash散列算法去校验文件的可靠性。比如,我们在MySQL官网下载文件的时候,他会有提示该文件的hash值,我们可以在Linux系统中通过md5sum这个命令来计算对应下载文件的hash值,如果相等则说明文件被完整下载了。

Hash散列算法的核心目标转换具有相同长度、不可逆的消息摘要。
对比其他的加密算法,是将目标文本转成具有不同长度的,可逆的密文。Hash算法严格上来说并不属于加密算法,而是与加密算法属于并列关系的一种算法。

通过hash加盐的方式可以一定程度上进一步的保证数据的安全性。

  • salt可以简单的理解成:随机产生的一定长度的,可以和密码相结合,从而使hash算法产生不同结果的字符串。也就相当于你的新密码 = 旧密码 + 随机的盐值,然后对新密码进行hash。
  • 优点:这种方法会极大防止受到彩虹表的攻击,因为即便攻击者构造出彩虹表,因为你使用了 hash(密码+ salt),攻击者彩虹表里的哈希值hash(密码)和你数据库中的哈希值是不同的

参考连接

相关文章

  • 自定义开发-加密数据查询

    1,加密数据的查询 (1),基础查询 以加密电话号码为例,可以选择的方式: 第一种方式:在写sql语句的时候,通过...

  • 关于EOS合约开发中Table查询的问题

    EOS合约开发中,想要查询Table中的数据,有以下两种方式: 1 通过合约方法查询 可自定义查询字段,精确控制返...

  • 2019-02-27

    完成了用户查询功能和自定义数据查询功能,用户查询功能简单发送内容结合WHERE LIKE %%即可,自定义数据的查...

  • Java面试

    一、数据库 1、常见的数据库查询修改和数据库加密问题 (1)数据库的密码加密:单向加密,insertinto...

  • jdbc Template query

    自定义数据封装规则 查询

  • 被问懵了,加密后的数据如何进行模糊查询?

    加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路。 为了数据安全我们在开...

  • Postgresql 加解密操作

    创建加密扩展 创建测试表 插入测试数据 查询语句

  • SQL 日常用法积累

    自定义排序 多字段模糊查询 排序对空值的处理 postgresql jsonb数据查询 postgresql

  • 【Unity】「DES」数据加密解密

    游戏开发,有一点很重要,就是数据加密数据加密的方式种类有很多下面我们实现下 DES加密 定义秘钥 加密 解密

  • iOS实现MD5加密

    软件开发过程中,对数据进行加密是保证数据安全的重要手段,常见的加密有Base64加密和MD5加密。Base64加密...

网友评论

      本文标题:自定义开发-加密数据查询

      本文链接:https://www.haomeiwen.com/subject/zshftdtx.html