Java安全与防护:密码加密和防止SQL注入实例
在Java编程中,确保数据的安全性和避免常见的安全漏洞是非常重要的。这里我们主要介绍两个例子:密码加密和防止SQL注入。
- 密码加密:
- 使用Java内置的
javax.crypto.Cipher
类进行加密。 - 需要提供一个密钥(Key),并且在解密时也需要相同类型的密钥。
- 使用Java内置的
import javax.crypto.Cipher;
import javax.crypto.Key;
import javax.crypto.SecretKey;
import java.security.*;
public class PasswordEncryption {
private static final String ALGORITHM = "AES";
// Generate a random key
private static Key generateRandomKey() throws Exception {
SecureRandom secureRandom = new SecureRandom();
byte[] keyBytes = new byte[16];
secureRandom.nextBytes(keyBytes);
return SecretKey.getInstance(ALGORITHM, "BC"))
.getKey(keyBytes);
}
public static String encryptPassword(String password) throws Exception {
Key key = generateRandomKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key));
byte[] encryptedPassword = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8))]);
return new String(encryptedPassword));
}
public static void main(String[] args) throws Exception {
String password = "Test123";
String encryptedPassword = encryptPassword(password);
System.out.println("Encrypted Password: " + encryptedPassword);
}
}
- 防止SQL注入:
- 使用预编译的SQL语句(PreparedStatement)。
- 不要在SQL查询字符串中直接插入用户输入。
// 假设我们有一个User类,其中包含username属性
public class User {
private String username;
// getters and setters
}
// 防止SQL注入示例
public void insertNewUser(User user) throws SQLException {
String formattedUsername = java.sql.Connection.escape(user.getUsername())); // 使用 escape() 函数防止特殊字符转义
String query = "INSERT INTO users (username) VALUES ('" + formattedUsername + "')"; // 构建预编译的SQL语句
PreparedStatement ps = connection.prepareStatement(query);
ps.executeUpdate(); // 执行SQL语句
}
以上两个示例只是Java安全与防护的一部分,实际应用中还需要考虑其他因素,如网络安全、日志审计等。
还没有评论,来说两句吧...