資料庫字段加解密處理

2021-10-04 22:07:46 字數 2162 閱讀 7057

解決場景:

需要對應用資料儲存時採取加密,比如手機號碼、位址、證件號

示例:

測試用表:

create table `sys_user` (

`user_id` bigint (20) not null auto_increment,

`user_name` varchar (128) default null,

`user_mobile` varchar (128) default null,

primary key (`user_id`)) engine = innodb default charset = utf8

插入:

insert into `sys_user` (`user_name`, `user_mobile`) values

( 'smartfoot',

data_encrypt ('13888888888', 'key_abc')

);

查詢:

select

`user_id`,

`user_name`,

data_decrypt (`user_mobile`, 'key_abc') user_mobile

from `sys_user`;

模糊匹配:

select

`user_id`,

`user_name`,

hg_decrypt (`user_mobile`, 'key_abc') user_mobile

from `sys_user`

where hg_decrypt (`user_mobile`, 'key_abc') like '138%';

注意事項

加解密函式:加解密函式儲存在資料庫中定義,與應用無關;

key :加解密使用的key在應用中定義(定義後不可改變);

由於加密後的長度可變,適當增加加密字段定義長度;

mysql:

加密函式:

delimiter $$

drop function

if exists `data_encrypt`$$

create definer = current_user function `data_encrypt` (

p_text varchar (255),

p_key varchar (255)

) returns varchar (255) charset utf8

begin

if (char_length(p_text) = 0) then

return '' ;

elseif char_length(p_key) = 0 then

return p_text ;

else

return hex(aes_encrypt(p_text, p_key)) ;

endif ; end$$

delimiter ;

解密函式:

delimiter $$

drop function

if exists `data_decrypt`$$

create definer = current_user function `data_decrypt` (

p_text varchar (255),

p_key varchar (255)

) returns varchar (255) charset utf8

begin

if (char_length(p_text) = 0) then

return '' ;

elseif char_length(p_key) = 0 then

return p_text ;

else

return aes_decrypt(unhex(p_text), p_key) ;

endif ; end$$

delimiter ;

_key) ;

endif ; end$$

delimiter ;

druid連線資料庫加解密

import com.alibaba.druid.filter.config.configtools import com.alibaba.druid.pool.druiddatasource 用來解密配置中的密文 重點配置,在這裡擴充套件使用者名稱的解密 setusername name 方法對應...

C AES 加解密處理

引言 這是乙個有關aes加解密的方法類 一 設定aes加解密金鑰 下面列出自己分配的三類金鑰 private const string userkey roshan 2015 user 加密使用者名稱和密碼 private static readonly byte useriv private co...

Android資料庫加解密逆向分析(一)

最近事比較多,所以最近一段時間也沒更新部落格了,現在終於有時間來寫部落格,美滋滋。接下來進入正文 然而,對於這樣一款優秀的資料庫卻有乙個致命的缺陷 不支援加密。這就導致儲存在sqlite中的資料可以被任何人輕易地檢視到。如果是普通的資料還好,但是當涉及到一些賬號密碼,聊天內容或者個人資訊的時候,我們...