您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在Java中,数据访问对象(DAO)负责与数据库进行交互。如果你想在DAO层实现数据加密,可以在执行数据库操作之前对数据进行加密,以及在从数据库读取数据后对其进行解密。以下是一个简单的示例,展示了如何在DAO层实现数据加密和解密。
首先,你需要一个加密工具类,用于执行加密和解密操作。这里我们使用Java的javax.crypto库实现一个简单的AES加密:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class EncryptionUtil {
private static final String ALGORITHM = "AES";
private static final String KEY = "your-secret-key"; // 请替换为你自己的密钥
public static String encrypt(String data) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String encryptedData) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decodedBytes = Base64.getDecoder().decode(encryptedData);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes);
}
}
接下来,在你的DAO类中,可以在插入数据之前调用encrypt
方法对数据进行加密,以及在查询数据后调用decrypt
方法对数据进行解密。以下是一个简单的UserDao示例:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
private Connection connection;
public UserDao(Connection connection) {
this.connection = connection;
}
public void insertUser(String username, String password) throws Exception {
String encryptedPassword = EncryptionUtil.encrypt(password);
String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setString(1, username);
stmt.setString(2, encryptedPassword);
stmt.executeUpdate();
}
}
public User getUser(String username) throws Exception {
String sql = "SELECT * FROM users WHERE username = ?";
try (PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setString(1, username);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
String encryptedPassword = rs.getString("password");
String password = EncryptionUtil.decrypt(encryptedPassword);
return new User(username, password);
}
}
return null;
}
}
在这个示例中,insertUser
方法在将密码插入数据库之前对其进行加密,而getUser
方法在从数据库读取密码后对其进行解密。这样,你的数据在数据库中将以加密形式存储,从而提高了安全性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。