数据加密重中之重个铁铁
先准备加解密工具类
package com.byyl.web.utils;
import org.springframework.util.Base64Utils;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;
/** * DES加密工具类 */
public class DES {
private static final String algorithm = "DES";
private static final String key = "sssss";
/** * 加密 * * @return * @throws Exception */
public static String encrypt(String data){
try {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
return Base64Utils.encodeToString(bt);
}catch (Exception e){
return null;
}
}
/** * 解密 * * @return * @throws Exception */
public static String decrypt(String data){
if (data == null) return null;
try{
byte[] bt = decrypt(Base64Utils.decodeFromString(data), key.getBytes());
return new String(bt);
}catch (Exception e){
return null;
}
}
/** * 根据键值进行加密 */
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
return initCipher(data, key, Cipher.ENCRYPT_MODE);
}
/** * 根据键值进行解密 */
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
return initCipher(data, key, Cipher.DECRYPT_MODE);
}
public static byte[] initCipher(byte[] data, byte[] key, int decryptMode) throws Exception {
/** 生成一个可信任的随机数源 **/
SecureRandom sr = new SecureRandom();
/** 从原始密钥数据创建DESKeySpec对象 **/
DESKeySpec dks = new DESKeySpec(key);
/** 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 **/
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(algorithm);
/** 将DESKeySpec对象转换成SecretKey对象 **/
SecretKey securekey = keyFactory.generateSecret(dks);
/** Cipher对象实际完成加密或解密操作 **/
Cipher cipher = Cipher.getInstance(algorithm);
/** 用密钥初始化Cipher对象 **/
cipher.init(decryptMode, securekey, sr);
return cipher.doFinal(data);
}
public static void main(String[] args) throws Exception {
// 待加密内容
String data = "helloworld";
// 密码,长度要是8的倍数
//加密
String str = DES.encrypt(data);
System.out.println(str);
//解密
System.out.println(DES.decrypt(str));
}
}
编写自定义加解密Handler类继承 BaseTypeHandler
package com.byyl.web.config;
import com.byyl.web.utils.DES;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/** * 配置mybatis 敏感数据加密 */
public class DesEncryptHandler extends BaseTypeHandler {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, DES.encrypt((String)o));
}
@Override
public Object getNullableResult(ResultSet resultSet, String s) throws SQLException {
String columnValue = resultSet.getString(s);
return DES.decrypt(columnValue);
}
@Override
public Object getNullableResult(ResultSet resultSet, int i) throws SQLException {
String columnValue = resultSet.getString(i);
return DES.decrypt(columnValue);
}
@Override
public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
String columnValue = callableStatement.getString(i);
return DES.decrypt(columnValue);
}
}
类中使用
@Data
@EqualsAndHashCode(callSuper = false)
//autoResultMap = true 要有否则查询时无法解密
@TableName(value = "vd_patient",autoResultMap = true )
@ApiModel(value="VdPatient对象")
public class VdPatient implements Serializable {
//typeHandle设置成自己编写的DesEncryptHandler
@TableField(typeHandler = DesEncryptHandler.class)
private String idCard;
}
今天的文章Mybatis plus 数据加密分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28820.html