需求:根据客户要求,将数据存储在数据库需要加密存储,并且不影响现有业务。
之前想过aop处理数据进行代码层面加密。但是模糊搜索有一定困难。
最后找到
@ColumnTransformer注解来自定义sql 写的时候加密 查的时候解密。 由于中文用原来的解密会出现乱码问题。网上找了个解决方案 用cast(xx as char)可以解决乱码问题
@ColumnTransformer(forColumn = "name",
write = "HEX(AES_ENCRYPT(?, " + EncryptUtil.DB_KEY + "))",
read = "cast(AES_DECRYPT(UNHEX(name), " + EncryptUtil.DB_KEY + ")as char)")
HEX(AES_ENCRYPT("加密内容", " 密钥"))