本文目录导读:

我将为您介绍如何在Java中实现解密展示功能,这里提供几个常见场景的实现方案:
对称加密解密 (AES)
基本实现
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESDecryptExample {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
/**
* AES解密
* @param encryptedData 加密后的数据(Base64编码)
* @param secretKey 密钥(16/24/32位)
* @return 解密后的明文
*/
public static String decrypt(String encryptedData, String secretKey) throws Exception {
// 1. 创建密钥规范
SecretKeySpec keySpec = new SecretKeySpec(
secretKey.getBytes(StandardCharsets.UTF_8), ALGORITHM);
// 2. 创建密码器
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
// 3. 执行解密
byte[] decryptedBytes = cipher.doFinal(
Base64.getDecoder().decode(encryptedData));
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
// 使用示例
public static void main(String[] args) {
try {
String encryptedText = "加密后的Base64字符串";
String key = "YourSecretKey123"; // 16位密钥
String decryptedText = decrypt(encryptedText, key);
System.out.println("解密结果: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
安全密钥管理方案
使用密钥文件
import java.io.*;
import java.nio.file.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
public class SecureKeyManager {
private static final String KEY_FILE = "secret.key";
// 生成并保存密钥
public static void generateAndSaveKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // 256位密钥
SecretKey secretKey = keyGen.generateKey();
// 保存到文件
try (FileOutputStream fos = new FileOutputStream(KEY_FILE)) {
fos.write(secretKey.getEncoded());
}
}
// 从文件加载密钥
public static SecretKey loadKey() throws Exception {
byte[] keyBytes = Files.readAllBytes(Paths.get(KEY_FILE));
return new SecretKeySpec(keyBytes, "AES");
}
}
解密展示UI界面 (JavaFX)
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class DecryptDisplayApp extends Application {
private TextArea inputArea;
private TextArea outputArea;
private PasswordField keyField;
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("解密展示工具");
// 创建UI组件
inputArea = new TextArea();
inputArea.setPromptText("输入加密内容...");
outputArea = new TextArea();
outputArea.setEditable(false);
outputArea.setPromptText("解密结果将显示在此处...");
keyField = new PasswordField();
keyField.setPromptText("输入密钥");
Button decryptBtn = new Button("解密");
decryptBtn.setOnAction(e -> decryptAndShow());
Button clearBtn = new Button("清空");
clearBtn.setOnAction(e -> clearAll());
// 布局
VBox root = new VBox(10);
root.setPadding(new Insets(20));
root.getChildren().addAll(
new Label("加密内容:"),
inputArea,
new Label("密钥:"),
keyField,
new HBox(10, decryptBtn, clearBtn),
new Label("解密结果:"),
outputArea
);
Scene scene = new Scene(root, 600, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
private void decryptAndShow() {
try {
String encrypted = inputArea.getText();
String key = keyField.getText();
if (encrypted.isEmpty() || key.isEmpty()) {
showAlert("错误", "请输入加密内容和密钥");
return;
}
String decrypted = AESDecryptExample.decrypt(encrypted, key);
outputArea.setText(decrypted);
} catch (Exception ex) {
showAlert("解密失败", ex.getMessage());
}
}
private void clearAll() {
inputArea.clear();
outputArea.clear();
keyField.clear();
}
private void showAlert(String title, String message) {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle(title);
alert.setContentText(message);
alert.showAndWait();
}
public static void main(String[] args) {
launch(args);
}
}
Web应用解密展示 (Spring Boot)
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@Controller
public class DecryptController {
@GetMapping("/decrypt")
public String showDecryptPage() {
return "decrypt";
}
@PostMapping("/decrypt")
public String decryptData(
@RequestParam("encryptedData") String encryptedData,
@RequestParam("key") String key,
Model model) {
try {
String decrypted = AESDecryptExample.decrypt(encryptedData, key);
model.addAttribute("result", decrypted);
model.addAttribute("success", true);
} catch (Exception e) {
model.addAttribute("error", "解密失败: " + e.getMessage());
model.addAttribute("success", false);
}
return "decrypt";
}
}
HTML模板 (Thymeleaf):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>解密展示</title>
</head>
<body>
<h2>数据解密</h2>
<form action="/decrypt" method="post">
<label>加密数据:</label><br>
<textarea name="encryptedData" rows="5" cols="50"></textarea><br><br>
<label>密钥:</label><br>
<input type="password" name="key" size="50"><br><br>
<button type="submit">解密</button>
</form>
<div th:if="${success}">
<h3>解密结果:</h3>
<textarea rows="5" cols="50" th:text="${result}"></textarea>
</div>
<div th:if="${error}" style="color: red;">
<p th:text="${error}"></p>
</div>
</body>
</html>
安全最佳实践
// 1. 使用安全随机数生成初始化向量(IV)
public class SecureDecryptor {
public static String decryptWithIV(
String encryptedData,
String key,
byte[] iv) throws Exception {
IvParameterSpec ivSpec = new IvParameterSpec(iv);
SecretKeySpec keySpec = new SecretKeySpec(
key.getBytes(StandardCharsets.UTF_8), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(
Base64.getDecoder().decode(encryptedData));
return new String(decrypted, StandardCharsets.UTF_8);
}
// 2. 密钥派生
public static SecretKey deriveKey(String password, byte[] salt)
throws Exception {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(
password.toCharArray(),
salt,
65536, // 迭代次数
256); // 密钥长度
return new SecretKeySpec(factory.generateSecret(spec).getEncoded(), "AES");
}
}
注意事项
- 密钥管理:密钥应安全存储,避免硬编码在代码中
- 算法选择:推荐使用AES-GCM模式,提供认证加密
- 错误处理:解密失败时不要泄露具体原因
- 输入验证:对解密数据进行验证,防止注入攻击
- 日志记录:不要在日志中记录敏感信息
根据您的具体需求选择适合的实现方案,如果需要在移动端或分布式系统中使用,建议使用HTTPS传输加密数据,并在服务端进行解密处理。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播