• MYSQL 敏感数据加密后进行模糊查询


    问题:

    对于一些敏感数据,比如用户的手机号、身份证号、银行卡号之类进行加密处理,是一些系统的常用处理方式。但是这保证了数据的安全之外又诞生了另外一个问题,就是搜索这些信息的时候,模糊查询变得困难。

    解决方案:

    利用mysql 的 AES_ENCRYPTAES_DECRYPT 方法来处理数据的加密和解密。

    写入数据:
    INSERT INTO wz_treatment_columns_setting (keywords) VALUES (AES_ENCRYPT('中华人民共和国万岁', 'ICnkuyk9EARDhXHY'));
    INSERT INTO wz_treatment_columns_setting (keywords) VALUES (AES_ENCRYPT('世界人民大团结万岁', 'ICnkuyk9EARDhXHY'));
    
    • 1
    • 2
    查询数据:
    SELECT * FROM wz_treatment_columns_setting WHERE AES_DECRYPT(keywords, 'ICnkuyk9EARDhXHY') LIKE '%世界%';
    
    • 1
    注意事情:

    keywords 不能是 varchar 需要是 varbinary

    优化:

    为了数据显示更友好,可以增加 hexunhex 函数

    插入数据:

    INSERT INTO wz_treatment_columns_setting (keywords) VALUES (hex(AES_ENCRYPT('中华人民共和国万岁', 'ICnkuyk9EARDhXHY')));
    INSERT INTO wz_treatment_columns_setting (keywords) VALUES (hex(AES_ENCRYPT('世界人民大团结万岁', 'ICnkuyk9EARDhXHY')));
    
    • 1
    • 2

    查询数据:

    SELECT * FROM wz_treatment_columns_setting WHERE AES_DECRYPT(UNHEX(keywords), 'ICnkuyk9EARDhXHY') LIKE '%世界%';
    
    • 1
  • 相关阅读:
    浏览器输入url,到看到页面会发生什么?
    Jmeter接口测试+压力测试
    KLEE简单使用
    销帮帮CRM与电商运营增效的关系?
    C++ - set 和 map 的实现(下篇)- set 和 map 的迭代器实现
    redis进阶
    MediaPlayer_Analyze-5-NuPlayer
    2023天津工业大学计算机考研信息汇总
    Linux crash调试(一)
    MyBatis&Plus笔记
  • 原文地址:https://blog.csdn.net/yuexiage1/article/details/133697884