MYSQL的加密解密函数,实现钱包的加密功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_zhulinghai/article/details/89476787

参数说明:
1) balanceKey:钱包余额加密字段;注意数据库不能设置为varchar类型,需要是varbinary(二进制)类型;
例如:balanceKey varbinary(500) DEFAULT NULL;
2) pskey是加密秘钥:项目中通过MD5加密方法获取
例如:MD5Util.encoderWithSalt(str, salt);
3) CAST AS 类型转换函数 ,表达式中的类型转化成DECIMAL类型
4) balance,新增或减少的余额

加密解密函数:
1) AES_ENCRYPT()函数将明文加密,存储在MySQL中
创建测试表:

CREATE TABLE `myTest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `balanceKey` varbinary(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

插入加密数据:

INSERT into myTest (balanceKey) VALUES (AES_ENCRYPT('hello world', 'key'));

2) 解密函数AES_DECRYPT()

SELECT AES_DECRYPT(balanceKey,'key') FROM  myTest;

结果:
在这里插入图片描述

功能描述:主要是对钱包余额做一个加密

1. 每次修改钱包余额的时候先解密,减去或加上修改值,然后在加密保存到数据库中
AES_ENCRYPT(CAST(AES_DECRYPT(balanceKey,#{pskey})+#{balance} AS DECIMAL(16, 2)),#{pskey}),
2. 新增的时候直接通过加密函数保存就可以了(项目中实际是通过同一个方法来实现的,都是更新余额)
例如:

<update id="updateWallet" parameterType="map">
        UPDATE maker
        <set>
            <if test="balance != null">
                balance = balance+#{balance},
                balanceKey =  AES_ENCRYPT(CAST(AES_DECRYPT(balanceKey,#{pskey})+#{balance} AS DECIMAL(16, 2)),#{pskey}),
            </if>
            <if test="total != null">
                total = total+#{total},
            </if>
        </set>
        WHERE id = #{makerId}
        <if test="balance != null and balance &lt; 0 and isDeduct != true">
            AND AES_DECRYPT(balanceKey,#{pskey})+#{balance} >= 0
        </if>
    </update>

猜你喜欢

转载自blog.csdn.net/java_zhulinghai/article/details/89476787