Hibernate 加密字段踩坑

之前用过Hibernate的加密字段感觉还挺好用,于是按照某度的资料兴冲冲的用了:

    @MetaDict(value = "系数")
	@Column(name = "coeff_", precision = 22, scale = 8, columnDefinition = "BLOB")
	@ColumnTransformer(write = "AES_ENCRYPT(?, 'coeff_')", read = "CAST(AES_DECRYPT(coeff_,'coeff_') as char(1000))")
	private BigDecimal coeff;

大概说下配置含义:

columnDefinition: BOLB (列采用二进制流的格式保存)

write = "AES_ENCRYPT(?, 'coeff_')"  ? 表示加密的当前字段,'coeff_' 表示加密的盐。

然而Hibernate 5升级以后,查询出来的值为Null. 

究其原因大概为:比如查询的时候使用连接查询,这里假设要查询对象a.coeff 的值。正常的查询语句应该是:

SELECT AES_DECRYPT(a.coeff_,'a.coeff_') FROM a

但是由于盐的值和列名相同所以也在盐值前面加了表的别名,变为:

SELECT AES_DECRYPT(a.coeff_,'a.coeff_') FROM a

这样盐值不对,查询出来的数据也不对了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值