Java Servlet 可以封装常用的加密类,以实现对用户数据的保护。以下是一个简单的加密类封装示例:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class EncryptionUtils {
// 算法名
private static final String ALGORITHM_NAME = "AES";
// 填充方式
private static final String ALGORITHM_PADDING = "AES/CBC/PKCS5Padding";
// 加密密钥(长度必须是16位)
private static final String ENCRYPTION_KEY = "0123456789abcdef";
// 初始向量(长度必须是16位)
private static final String IV = "0123456789abcdef";
// 加密字符串
public static String encrypt(String plaintext) {
try {
SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec);
byte[] encrypted = cipher.doFinal(plaintext.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 解密字符串
public static String decrypt(String ciphertext) {
try {
SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);
byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
return new String(decrypted, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
这个类中使用了 Java 中提供的加密类库,实现了对字符串的加密和解密操作。加密方法使用 AES 算法对字符串进行加密,加密后的密文使用 Base64 编码。解密方法则是先使用 Base64 解码,再使用 AES 算法进行解密,最后将解密后的字节数组转换为字符串。
在 Servlet 中使用这个类只需要导入这个类,然后就可以使用其中的加密和解密方法了。例如
String plaintext = "Hello, world!";
String ciphertext = EncryptionUtils.encrypt(plaintext);
System.out.println(ciphertext); // 输出加密后的字符串
String decrypted = EncryptionUtils.decrypt(ciphertext);
System.out.println(decrypted); // 输出解密后的字符串
注意:这个示例中的加密密钥和初始向量都是写死的,实际应用中应该根据具体情况进行修改,不能直接使用这个示例中的值。
评论 (0)