使用mysql函数在云端安全的储存密码

/ 技术 / 278浏览
场景

因为大学时期接触社工库比较多,一直不敢一码通怕被撞库,短信验证码来随机设置密码。下次要用时再手机号找回,重新设置。

最近重装系统次数有点多,密码找回有点崩溃,于是决定把密码加密一下放在云端数据库。

这样就算数据库被拖也不怕密码丢失了。

创建密码存放表
CREATE TABLE `user_info`  (
  `sys` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL
) ;
创建插入函数SAVE_PWD
CREATE DEFINER=`root`@`%` PROCEDURE `SAVE_PWD`(IN `sys` VARCHAR(25),IN `username` VARCHAR(25),IN `pwd` VARCHAR(25),IN `srckey` VARCHAR(25))
BEGIN
if srckey = '' then 
    set srckey:=sys;
    end if;
        insert user_info select sys,HEX(AES_ENCRYPT(username, srckey)) , HEX(AES_ENCRYPT(pwd, srckey));
END

入参:

运行:

image-20200808154836445

查看插入的数据:

image-20200808155132848

创建查询函数
CREATE DEFINER=`root`@`%` PROCEDURE `QRY_PWD`(IN `srckey` VARCHAR(25))
BEGIN
if srckey = '' then 
    set srckey:=null
    ;
    end if;
select `t`.`sys` AS `sys`,aes_decrypt(unhex(`t`.`key`),IFNULL(srckey,t.sys)) AS `key`,aes_decrypt(unhex(`t`.`value`),IFNULL(srckey,t.sys)) AS `value` from `user_info` `t`;
END

运行:

image-20200808155207891

查询数据:

image-20200808155312674

结果

可以插入的时候不选择加密参数 那么查询的时候也可以不用加密参数,不过建议加密钥就算进入数据库,不知道密钥也解不开数据。