MySQL中HEX 函数与UNHEX 函数

HEX 函数与UNHEX 函数

HEX 函数:将一个字符串或数字转换为十六进制格式的字符串

UNHEX 函数:执行HEX(str)的逆运算。 即,它将参数中的每对十六进制数字解释为一个数字,并将其转换为该数字表示的字符。 结果字符将作为二进制字符串返回

方式一:

1、将字段属性设置为varbinary/binary/四个blob类型,等二进制字段属性。

create table user2
(
    id       int            null,
    username varbinary(200) null,
    id_card  varbinary(200) null
);

2、将username,id_card进行AES加密,密钥为key,存入表中

INSERT INTO user2 VALUES (1, AES_ENCRYPT('张三', 'key'), AES_ENCRYPT('360153411530193713', 'key'));

3、查询的时候解密

select id, aes_decrypt(username,'key') as username,aes_decrypt(id_card,'key')as id_card from user2;

方式二:

1、将密文十六进制化,再存入varchar/char列。此处需要用到HEX()来存入,用UNHEX()取出。

create table user
(
    id       int                                    null,
    username varchar(50)                            null,
    id_card  varchar(256) collate latin1_german1_ci null,
    password varchar(60)                            null
);

2、将username,id_card进行加密存入,密匙123zxq 

insert into user(id, username, id_card, password)
values (2, hex(aes_encrypt('李四', '123zxq')), hex(aes_encrypt('12057108241111', '123zxq')), 123456);

3、解密

select id,AES_DECRYPT(UNHEX(username),'123zxq'),AES_DECRYPT(UNHEX(id_card),'123zxq') as id_card from user;

base64同理

入库:

insert into user(id, username, id_card, password)
values (2, to_base64(aes_encrypt('李四', '123zxq')), to_base64(aes_encrypt('12057108241111', '123zxq')), 123456);

查询:

select id,AES_DECRYPT(from_base64(username),'123zxq') as username,AES_DECRYPT(from_base64(id_card),'123zxq') as id_card from user;

关于base64的理解

https://www.jianshu.com/p/7224c07ff4e0

https://zhuanlan.zhihu.com/p/516623851

总结

​ 采用的AES的加密方式与java是一致的。不过加密必然导致牺牲查询的性能,用了加密函数后,查询该字段,必定不走索引。

posted on 2022-09-30 10:43  大山008  阅读(930)  评论(0)    收藏  举报