MYSQL加密和壓縮函數(shù)詳解以及實(shí)戰(zhàn)(附示例)
MySQL提供了多種加密和壓縮方式,可以幫助保護(hù)數(shù)據(jù)庫(kù)中的敏感數(shù)據(jù)。以下是一些常見(jiàn)的MySQL加密和壓縮方法參考:
一、AES_ENCRYPT AES加密
MySQL AES_ENCRYPT()
函數(shù)使用 AES 加密算法加密一個(gè)字符串。
語(yǔ)法:
SELECT AES_ENCRYPT(str, key_str)
參數(shù)說(shuō):
str
:必需的。一個(gè)要加密的字符串。key_str
:必需的。密鑰。
返回值:
- 加密后的二進(jìn)制字符串。
- 返回
NULL情況:
任意參數(shù)為NULL。
示例:
mysql> SELECT AES_ENCRYPT('hello', '123456'), AES_ENCRYPT(null, '123456'), AES_ENCRYPT('hello', NULL); +--------------------------------+-----------------------------+----------------------------+ | AES_ENCRYPT('hello', '123456') | AES_ENCRYPT(null, '123456') | AES_ENCRYPT('hello', NULL) | +--------------------------------+-----------------------------+----------------------------+ | èòIL&W??4@s′ | NULL | NULL | +--------------------------------+-----------------------------+----------------------------+ 1 row in set (0.00 sec)
二、AES_DECRYPT AES解密
MySQL AES_DECRYPT() 函數(shù)使用 AES 加密算法解密一個(gè)由 AES_ENCRYPT() 加密后的字符串。
語(yǔ)法:
SELECT AES_DECRYPT(crypt_str, key_str)
參數(shù)說(shuō)明:
crypt_str:
必需的。一個(gè)要加密的字符串。key_str
:必需的。密鑰。
返回值:
- 解密后的原始明文字符串。
- 返回
NULL情況:
任意參數(shù)為NULL。
示例:
SELECT AES_DECRYPT(AES_ENCRYPT('hello', 'abcde'), 'abcde'), // hello AES_DECRYPT(AES_ENCRYPT('hello', 'abcde'), null); // NULL
三、COMPRESS 壓縮字符串
MySQL COMPRESS() 函數(shù)壓縮一個(gè)字符串并返回壓縮后的二進(jìn)制字符串。
要解壓縮 COMPRESS() 函數(shù)壓縮后的內(nèi)容,請(qǐng)使用 UNCOMPRESS() 函數(shù)。
語(yǔ)法:
COMPRESS(str)
參數(shù)說(shuō)明:
str:
必需的。一個(gè)要壓縮的字符串。
返回值:
- 壓縮后的二進(jìn)制字符串。
- 返回
NULL情況:
參數(shù)為NULL。
示例:
mysql> SELECT COMPRESS('hello'), LENGTH(COMPRESS('hello')),COMPRESS(''),LENGTH(COMPRESS('')); +-------------------+---------------------------+--------------+----------------------+ | COMPRESS('hello') | LENGTH(COMPRESS('hello')) | COMPRESS('') | LENGTH(COMPRESS('')) | +-------------------+---------------------------+--------------+----------------------+ | x??H??? , | 17 | | 0 | +-------------------+---------------------------+--------------+----------------------+
看似壓縮后的字符串比原字符串還要長(zhǎng)。
下面用函數(shù)REPEAT 函數(shù)來(lái)生成指定長(zhǎng)度的字符串再壓縮看。
mysql> SELECT LENGTH(REPEAT('abc', 1000)), LENGTH(COMPRESS(REPEAT('abc', 1000))); +-----------------------------+---------------------------------------+ | LENGTH(REPEAT('abc', 1000)) | LENGTH(COMPRESS(REPEAT('abc', 1000))) | +-----------------------------+---------------------------------------+ | 3000 | 33 | +-----------------------------+---------------------------------------+
壓縮效果:3000長(zhǎng)度的字符串壓縮后長(zhǎng)度為33
四、UNCOMPRESS 解壓COMPRESS壓縮字符串
MySQL UNCOMPRESS() 函數(shù)解壓縮 COMPRESS() 函數(shù)壓縮后的字符串。
語(yǔ)法:
UNCOMPRESS(str_to_uncompress)
參數(shù)說(shuō)明:
str_to_uncompress
:必需的。一個(gè)要解壓縮的字符串。
返回值:
- 解壓縮指定的字符串
str_to_uncompress
,并將結(jié)果作為二進(jìn)制字符串返回。 - 返回
NULL情況:
參數(shù)為NULL。
示例:
mysql> SELECT UNCOMPRESS(COMPRESS('abcdefghjiklmnopqrstuvwxtz')),COMPRESS('abcdefghjiklmnopqrstuvwxtz'); +----------------------------------------------------+----------------------------------------+ | UNCOMPRESS(COMPRESS('abcdefghjiklmnopqrstuvwxtz')) | COMPRESS('abcdefghjiklmnopqrstuvwxtz') | +----------------------------------------------------+----------------------------------------+ | abcdefghjiklmnopqrstuvwxtz | x?KLJNIMK????????/(,*.)-+?(? ?} | +----------------------------------------------------+----------------------------------------+
五、UNCOMPRESSED_LENGTH 取壓縮字符串的原始字符串的長(zhǎng)度
MySQL UNCOMPRESSED_LENGTH()
函數(shù)返回一個(gè)壓縮的字符串的原始字符串的長(zhǎng)度。
語(yǔ)法:
UNCOMPRESSED_LENGTH(compressed_str)
參數(shù)說(shuō)明:
- compressed_str:必需的。一個(gè)使用 COMPRESS() 函數(shù)壓縮后的字符串。
返回值:
- 一個(gè)壓縮的字符串的原始字符串的長(zhǎng)度。
- 返回
NULL情況:參數(shù)為NULL。
示例:
mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')),COMPRESS('abcdefghjiklmnopqrstuvwxtz'); +-------------------------------------------------------------+----------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')) | COMPRESS('abcdefghjiklmnopqrstuvwxtz') | +-------------------------------------------------------------+----------------------------------------+ | 26 | x?KLJNIMK????????/(,*.)-+?(? ?} | +-------------------------------------------------------------+----------------------------------------+
六、MD5 md5加密
MySQL MD5()
函數(shù)計(jì)算一個(gè)給定字符串的 MD5 摘要,并將結(jié)果作為一個(gè) 32 位的由十六進(jìn)制字符組成的字符串返回。
語(yǔ)法:
MD5(str)
參數(shù)說(shuō)明:
str
:必需的。一個(gè)要計(jì)算 MD5 值的字符串。
返回值:
- 32 位的由十六進(jìn)制字符組成的字符串。
- 返回
NULL情況:參數(shù)為
NULL。
示例:
mysql> SELECT MD5('abc'); +----------------------------------+ | MD5('abc') | +----------------------------------+ | 900150983cd24fb0d6963f7d28e17f72 | +----------------------------------+
七、RANDOM_BYTES 隨機(jī)生成指定長(zhǎng)度字符串
MySQL RANDOM_BYTES()
函數(shù)隨機(jī)生成一個(gè)指定長(zhǎng)度的的二進(jìn)制串。
語(yǔ)法:
RANDOM_BYTES(len)
參數(shù)說(shuō)明:
len
:必需的。一個(gè)要計(jì)算 RANDOM_BYTES 值的字符串。
返回值:
- 一個(gè)長(zhǎng)度為
len
的由隨機(jī)字節(jié)產(chǎn)生的字符串。 - 返回
NULL情況:
參數(shù)len
為NULL。
示例:
mysql> SELECT RANDOM_BYTES(10),LENGTH(RANDOM_BYTES(10)),RANDOM_BYTES(NULL); +------------------+--------------------------+--------------------+ | RANDOM_BYTES(10) | LENGTH(RANDOM_BYTES(10)) | RANDOM_BYTES(NULL) | +------------------+--------------------------+--------------------+ | ?m ?? | 10 | NULL | +------------------+--------------------------+--------------------+
八、SHA 字符串的SHA-1 160 位校驗(yàn)和
MySQL SHA() 函數(shù)計(jì)算并返回給定字符串的 SHA-1 160 位校驗(yàn)和。 SHA() 函數(shù)與 MD5() 函數(shù)類似,也是一種計(jì)算摘要的函數(shù)。
MySQL SHA() 函數(shù)等效于 SHA1() 函數(shù)。
語(yǔ)法:
SHA(str)
參數(shù)說(shuō)明:
str
:必需的。一個(gè)要計(jì)算 SHA-1 160 位校驗(yàn)和的字符串。
返回值:
- 指定字符串的 SHA-1 160 位校驗(yàn)和。(40 位的由十六進(jìn)制字符組成的字符串)
- 返回
NULL情況:參數(shù)為NULL。
示例:
mysql> SELECT SHA('hello'),SHA(NULL); +------------------------------------------+-----------+ | SHA('hello') | SHA(NULL) | +------------------------------------------+-----------+ | aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d | NULL | +------------------------------------------+-----------+
九、SHA1 字符串的SHA-1 160 位校驗(yàn)和
MySQL SHA1() 函數(shù)計(jì)算并返回給定字符串的 SHA-1 160 位校驗(yàn)和。 SHA1() 函數(shù)與 MD5() 函數(shù)類似,也是一種計(jì)算摘要的函數(shù)。
MySQL SHA1() 函數(shù)等效于 SHA() 函數(shù)。
十、SHA2 給定字符串的 SHA-2 摘要
MySQL SHA2() 函數(shù)計(jì)算并返回給定字符串的 SHA-2 摘要,包括: SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。
SHA2() 函數(shù)與 MD5() 函數(shù)類似,也是一種計(jì)算摘要的函數(shù)。
語(yǔ)法:
SHA2(str, hash_length)
參數(shù)說(shuō)明:
str
:必需的。一個(gè)要計(jì)算 SHA-2 校驗(yàn)和的字符串。hash_length
:必需的。哈希長(zhǎng)度,可用值包括224
,256
,384
,512
和0
(相當(dāng)于256
), 分別對(duì)應(yīng)了 SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。
返回值:
- 一個(gè)由十六進(jìn)制字符組成的字符串,它是指定字符串的 SHA-2 摘要。
示例:
mysql> SELECT SHA2('hello', 224),SHA2(NULL, 1); +----------------------------------------------------------+---------------+ | SHA2('hello', 224) | SHA2(NULL, 1) | +----------------------------------------------------------+---------------+ | ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193 | NULL | +----------------------------------------------------------+---------------+
十一、STATEMENT_DIGEST 取SQL的哈希值
MySQL STATEMENT_DIGEST() 函數(shù)計(jì)算以字符串形式給定的 SQL 語(yǔ)句的語(yǔ)句摘要哈希值并返回。
語(yǔ)法:
STATEMENT_DIGEST(sql_stmt)
參數(shù)說(shuō)明:
- sql_stmt:必需的。一個(gè)要計(jì)算語(yǔ)句摘要哈希值的字符串。
返回值:
- 以字符串形式給定的 SQL 語(yǔ)句的語(yǔ)句摘要哈希值。
示例:
mysql> SELECT STATEMENT_DIGEST('SELECT 1'),STATEMENT_DIGEST(NULL); +------------------------------------------------------------------+------------------------+ | STATEMENT_DIGEST('SELECT 1') | STATEMENT_DIGEST(NULL) | +------------------------------------------------------------------+------------------------+ | d1b44b0c19af710b5a679907e284acd2ddc285201794bc69a2389d77baedddae | NULL | +------------------------------------------------------------------+------------------------+
十二、STATEMENT_DIGEST_TEXT 取SQL的規(guī)范語(yǔ)句摘要
MySQL STATEMENT_DIGEST_TEXT()
函數(shù)返回以字符串形式給定的 SQL 語(yǔ)句的規(guī)范語(yǔ)句摘要。
語(yǔ)法:
STATEMENT_DIGEST_TEXT(sql_stmt)
參數(shù)說(shuō)明:
sql_stmt
:必需的。一個(gè)要計(jì)算規(guī)范語(yǔ)句摘要的字符串。
返回值:
- SQL 語(yǔ)句的規(guī)范語(yǔ)句摘要。
- 返回
NULL情況:
任意參數(shù)為NULL。
示例:
mysql> SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1'),STATEMENT_DIGEST_TEXT(NULL); +------------------------------------------------------+-----------------------------+ | STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1') | STATEMENT_DIGEST_TEXT(NULL) | +------------------------------------------------------+-----------------------------+ | SELECT * FROM `t` WHERE `a` = ? | NULL | +------------------------------------------------------+-----------------------------+
總結(jié)
到此這篇關(guān)于MYSQL加密和壓縮函數(shù)詳解及實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)MYSQL加密和壓縮函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL之高可用集群部署及故障切換實(shí)現(xiàn)
這篇文章主要介紹了MySQL之高可用集群部署及故障切換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04MySQL復(fù)制問(wèn)題的三個(gè)參數(shù)分析
這篇文章主要介紹了MySQL復(fù)制問(wèn)題的三個(gè)參數(shù)分析,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2021-04-04輕松上手MYSQL之SQL優(yōu)化之Explain詳解
Explain是SQL分析工具中非常重要的一個(gè)功能,它可以模擬優(yōu)化器執(zhí)行查詢語(yǔ)句,幫助我們理解查詢是如何執(zhí)行的,這篇文章主要給大家介紹了關(guān)于輕松上手MYSQL之SQL優(yōu)化之Explain詳解的相關(guān)資料,需要的朋友可以參考下2024-06-06SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用
這篇文章主要為大家介紹了SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11innodb_flush_method取值方法(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇innodb_flush_method取值方法(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03MySQL單表千萬(wàn)級(jí)數(shù)據(jù)處理的思路分享
日前筆者需要處理MySQL單表千萬(wàn)級(jí)的電子元器件數(shù)據(jù),進(jìn)行數(shù)據(jù)歸類, 數(shù)據(jù)清洗以及器件參數(shù)處理,進(jìn)而得出國(guó)產(chǎn)器件與國(guó)外器件的替換兼容性數(shù)據(jù),為電子工程師尋找國(guó)產(chǎn)替換件提供參考。2021-06-06解決Navicat Premium 連接 MySQL 8.0 報(bào)錯(cuò)"1251"的問(wèn)題分析
這篇文章主要介紹了解決Navicat Premium 連接 MySQL 8.0 報(bào)錯(cuò)"1251"的問(wèn)題分析,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11