You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java JFrame加密解密程序解密功能失效问题求助

问题分析与修复方案

核心错误点

  1. 解密结果被覆盖:解密按钮事件中,先调用decrypt生成解密结果,随后立刻用llegir()读取的加密文本覆盖了Text2的内容,导致解密结果无法显示。
  2. 加密输入源错误:加密逻辑读取的是Text1的内容,但界面上Text才是用户输入明文的输入框,导致加密的是显示框内容而非用户输入的明文。
  3. 异常处理简陋:加密和解密的异常仅打印简单提示,无法定位具体问题。

修复步骤

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;

修复后流程

  1. 用户在Text输入框输入明文
  2. 点击加密按钮,明文被加密后保存到encriptar.txt,同时显示在Text1
  3. 点击解密按钮,读取文件中的加密文本,解密后显示在Text2

内容的提问来源于stack exchange,提问作者Martí Ribalta Vilà

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:35:18