<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
場景:在模糊查詢電話號碼的時候,發現電話號碼是進行加密過的,而傳進來的引數卻是明文的
PS:作為一個合格的程式設計師對使用者的一些敏感資料都要進行加密處理操作
比如:姓名、手機號、身份證號等等。
1、使用者端一般是這樣的
HEX 函數:將一個字串或數位轉換為十六進位制格式的字串
UNHEX 函數:執行HEX(str)的逆運算。 即,它將引數中的每對十六進位制數位解釋為一個數位,並將其轉換為該數位表示的字元。 結果字元將作為二進位制字串返回。
演示:
-- 先將mysql字串轉換為十六進位制格式的字串 SELECT HEX("mysql") -- 輸出結果 6D7973716C -- 在將上面的字串轉換成二進位制字串 SELECT UNHEX("6D7973716C") -- 輸出結果 mysql
1、AES_ENCRYPT函數,這個函數的使用場景是對一些安全性要求比較高的資料使用AES加密,語法為:
AES_ENCRYPT(str,key),其中第一個參數列示要加密的資料,第二引數是對應的key。
2、AES_DECRYPT函數,這個函數是與AES_DECRYPT對應的一個函數,用於解密經過AES_DNCRYPT加密的資料,語法為:AES_DNCRYPT(str,key)。
-- 使用AES_ENCRYPT函數對明文進行加密操作 SELECT AES_ENCRYPT('小王', 'intel1234567890a') FROM dual; -- 使用AES_DECRYPT函數密文進行解密操作 SELECT AES_DECRYPT(AES_ENCRYPT('小王', 'intel1234567890a'),'intel1234567890a') FROM dual;
然後把上面的函數一起結合使用就可以實現模糊查詢了
-- 此處使用AES-128-ECB加密模式 --第一個引數(小王)明文 第二個引數(intel1234567890a)為祕鑰(需要跟下面java程式碼對應) select hex(aes_encrypt("小王","intel1234567890a")) from dual; --明文加密為密文 --第一個sql加密出來的密文 select aes_decrypt(unhex("密文"),"intel1234567890a") from dual; --密文解密為明文 --模糊查詢 select * from table where aes_decrypt(unhex("密文"),"intel1234567890a") like CONCAT('%','明文','%')
有人會問了為什麼要使用hex和unhex我直接使用aes_encrypt和aes_decrypt加解密不就行了嗎?
因為直接使用aes_encrypt會導致加密出來的結果亂碼
package com.lezu.springboot.utils; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; import java.nio.charset.StandardCharsets; /** * AES加密方式演演算法工具類 * 此處使用AES-128-ECB加密模式,key需要為16位元。 */ public class AesUtils { /** * KEY 隨機的後續可更改 */ private static final byte[] key = "intel1234567890a".getBytes(StandardCharsets.UTF_8); /** * 初始化加密(預設的AES加密方式) */ private static final SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key); /** * 加密 * * @param str 加密之前的字串 * @return */ public static String encryptHex(String str) { return aes.encryptHex(str); } /** * 解密 * * @param str 加密後的字串 * @return */ public static String decryptStr(String str) { return aes.decryptStr(str); } public static void main(String[] args) { String plaintext = "小王"; String ciphertext = "183b2940aa6c6d2d73721415660c64c8"; String encryptHex = AesUtils.encryptHex(plaintext); System.out.println("加密後: " + encryptHex); String decryptStr = AesUtils.decryptStr(ciphertext); System.out.println("解密後: " + decryptStr); } // 加密後: 183b2940aa6c6d2d73721415660c64c8 // 解密後: 小王 }
到此這篇關於mysql如何對已經加密的欄位進行模糊查詢的文章就介紹到這了,更多相關mysq對加密欄位模糊查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45