日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

c mysql加密解密_mysql内置加密函数对数据加密

發布時間:2024/1/8 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c mysql加密解密_mysql内置加密函数对数据加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 目的

有些業務場景,數據庫中的敏感數據需要存儲為密文形式,這里使用mysql內置加密函數對數據進行加密。

2 加密算法

對稱加密算法:AES

加密后數據轉換為:十六進制

3 內置函數說明

函數

說明

AES_ENCRYPT(字符串,秘鑰)

加密函數

AES_DECRYPT(字符串,秘鑰)

解密函數

HEX(二進制字符串)

二進制轉十六進制

UNHEX(十六進制字符串)

十六進制轉 二進制

4 加密、解密入口

自定義mysql函數。使用自定義函數進行加密和解密,當前需要更改算法的時候,只需要更改自定義函數即可。

如果數據庫要求不能自定義函數,或者考慮對數據庫性能的影響,可以在JAVA代碼環節進行加密、解密的數據處理。

5 自定義加密、解密函數

5.1 加密函數

(1)函數定義

CREATE FUNCTION `ext_encrypt`(`info` varchar(100),`seacrt_key` varchar(20)) RETURNS varchar(100) CHARSET utf8

BEGIN

RETURN HEX(AES_ENCRYPT(info,seacrt_key));

END

(2)使用

# 密鑰為123456

# 加密結果為:6379779C5A736CAD203C4DD3D0A3CE7C

select ext_encrypt('abcd測試123','123456');

(3)場景

插入數據、更新數據

5.2 解密函數

(1)函數定義

CREATE FUNCTION `ext_decrypt`(`info` varchar(100),`seacrt_key` varchar(20)) RETURNS varchar(100) CHARSET utf8

BEGIN

RETURN AES_DECRYPT(UNHEX(info),seacrt_key);

END

(2)使用

# 密鑰為123456

# 解密密結果為:abcd測試123

select ext_decrypt('6379779C5A736CAD203C4DD3D0A3CE7C','123456');

(3)場景

返回查詢結果、組裝查詢條件

6 說明

6.1 對加密后結果進行進制轉換

為什么使用AES+HEX組合的方式,將加密后的數據轉換為16進制后再存儲,不直接存儲加密后的數據?

因為:AES加密后的數據為二進制,不可讀,不便于查詢出來后作為中間數據進行存儲處理。因此將加密后的二進制數據轉換為16進制后再進行存儲。

直接用AES進行加密,結果如下:

# AES加密結果:cyw�Zsl�

select AES_ENCRYPT('abcd測試123','123456');

6.2 關于HEX的長度

加密后得到的密文,通過HEX函數轉換為16進制后,會導致存儲的數據長度比原始數據長很多,浪費存儲空間。

這里可以考慮使用base32和base64,將二進制轉換為32位或64位,會大大減少轉換后的字符串長度,減少對于數據庫存儲空間的浪費。

這里以轉換為64進制為例:

(1)加密

# 加密,結果:Y3l3nFpzbK0gPE3T0KPOfA==

select TO_BASE64(AES_ENCRYPT('abcd測試123','123456'));

(2)解密

# 解密,結果:abcd測試123

select AES_DECRYPT(FROM_BASE64('Y3l3nFpzbK0gPE3T0KPOfA=='),'123456');

可見,同樣的數據加密后,轉換為不同進制,結果的長度不一樣。

進制

轉換后結果

16進制HEX

6379779C5A736CAD203C4DD3D0A3CE7C

64進制BASE64

Y3l3nFpzbK0gPE3T0KPOfA==

如果從存儲空間考慮,建議轉換為64進制,兩個進制轉換上對于服務器性能和加密速度上有一定的區別,可以自行測試。

總結

以上是生活随笔為你收集整理的c mysql加密解密_mysql内置加密函数对数据加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。