解決場景:
需要對應用資料儲存時採取加密,比如手機號碼、位址、證件號
示例:
測試用表:
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中的資料可以被任何人輕易地檢視到。如果是普通的資料還好,但是當涉及到一些賬號密碼,聊天內容或者個人資訊的時候,我們...