Java JFrame加密解密程序解密功能失效问题求助
问题分析与修复方案
核心错误点
- 解密结果被覆盖:解密按钮事件中,先调用
decrypt生成解密结果,随后立刻用llegir()读取的加密文本覆盖了Text2的内容,导致解密结果无法显示。 - 加密输入源错误:加密逻辑读取的是
Text1的内容,但界面上Text才是用户输入明文的输入框,导致加密的是显示框内容而非用户输入的明文。 - 异常处理简陋:加密和解密的异常仅打印简单提示,无法定位具体问题。
修复步骤
1. 修正解密按钮事件逻辑
修改btn_DecriptActionPerformed方法,移除覆盖解密结果的代码,保留解密结果的显示:
private void btn_DecriptActionPerformed(java.awt.event.ActionEvent evt) { String encryptedText = llegir(); String decryptedText = decrypt(encryptedText, "Marti"); Text2.setText(decryptedText); }
2. 修正加密按钮的输入源
修改btn_EncriptActionPerformed方法,读取用户输入的Text文本框内容作为明文:
private void btn_EncriptActionPerformed(java.awt.event.ActionEvent evt) { String plainText = Text.getText(); // 读取用户输入的明文 String encryptedText = encrypt(plainText, "Marti"); Txt(encryptedText); // 保存加密结果到文件 Text1.setText(encryptedText); // 显示加密结果 Text1.setEditable(false); }
3. 完善异常处理(可选但推荐)
在encrypt和decrypt方法中打印完整异常堆栈,便于排查问题:
public static String encrypt(final String strToEncrypt, final String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder() .encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); } catch (Exception e) { System.err.println("加密错误: "); e.printStackTrace(); } return null; } public static String decrypt(final String strToDecrypt, final String secret) { try { setKey(secret); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder() .decode(strToDecrypt))); } catch (Exception e) { System.err.println("解密错误: " + e.toString()); e.printStackTrace(); } return null; }
4. 补充必要的导入(若编译报错)
确保代码顶部导入以下类:
import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64;
修复后流程
- 用户在
Text输入框输入明文 - 点击加密按钮,明文被加密后保存到
encriptar.txt,同时显示在Text1 - 点击解密按钮,读取文件中的加密文本,解密后显示在
Text2
内容的提问来源于stack exchange,提问作者Martí Ribalta Vilà
相关产品推荐
相关产品推荐

