MySQL中对敏感字段值进行加密存储

本文介绍了一种使用MySQL数据库内置加密函数AES_ENCRYPT和AES_DECRYPT处理敏感信息的方法,通过创建公共类存储加密密钥,无需修改后台代码即可实现数据加密存储和解密查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中有时候有些敏感的信息存在数据库中,不想被别人直接看到,那么我们就需要加密处理,这有好多种方式,我这里介绍一种只用MySQL数据库进行处理的方式,这种方式的好处是不用修改后台代码,只需要修改SQL的写法就可以。
先新建一个公共类,用来映射加密的秘钥:

package com.yixinlian.oa.common;

public class Common {
    public static final String MYSQL_ENCRYPT_KEY = "miyaokey";
}

然后在SQL中处理的时候加上特殊字段的处理就好了:

<update id="changePassword" parameterType="java.util.Map">
        update   user
        set
         `password`= HEX(AES_ENCRYPT(#{newPassword},'${@com.yixinlian.oa.common.Common@MYSQL_ENCRYPT_KEY}'))
        where `name` = #{name}
        and  `password`= HEX(AES_ENCRYPT(#{oldPassword},'${@com.yixinlian.oa.common.Common@MYSQL_ENCRYPT_KEY}'))
    </update>

这样其他的都不用变,插入的时候需要这样处理,

HEX(AES_ENCRYPT(#{字段参数},'${@com.yixinlian.oa.common.Common@MYSQL_ENCRYPT_KEY}'))

例:

INSERT INTO 
 `yixinlian`.`user` (`name`, `number`, `password`, `permission`) 
 VALUES ('admin', 'E010000',
  HEX(AES_ENCRYPT('zhangyao','yixinlian')),
   '1');

查询的时候,要这样处理:

AES_DECRYPT(UNHEX(字段参数),'${@com.yixinlian.oa.common.Common@MYSQL_ENCRYPT_KEY}') 
 <select id="findUserById" resultType="com.yixinlian.oa.bean.User">
        SELECT `id`,`name`, `number`, AES_DECRYPT(UNHEX(`password`),'${@com.yixinlian.oa.common.Common@MYSQL_ENCRYPT_KEY}') as 'password', `permission`
        FROM user
        WHERE
        `id`  =  #{id}
    </select>

代码中不需要做什么改动,存进去时候传的啥值,取出来就还是啥值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值