从.txt文件解密Java AES仅在IDE中有效
我正在做一个简单的Java程序,它从一个.txt文件中读取AES加密的文本,然后对其进行解密,将其打印到一个文本框中。我在IDE中进行了测试,一切都正常。但是,如果我构建一个.jar并打开它,文本框中不会添加任何文本。 它确实找到了.txt文件,它确实读取了文本,但我认为解密部分有问题从.txt文件解密Java AES仅在IDE中有效,java,encryption,jar,aes,Java,Encryption,Jar,Aes,我正在做一个简单的Java程序,它从一个.txt文件中读取AES加密的文本,然后对其进行解密,将其打印到一个文本框中。我在IDE中进行了测试,一切都正常。但是,如果我构建一个.jar并打开它,文本框中不会添加任何文本。 它确实找到了.txt文件,它确实读取了文本,但我认为解密部分有问题 public String decryptAES(String input, String key, String initVector){ try { IvParameterSpec
public String decryptAES(String input, String key, String initVector){
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.decodeBase64(input));
return new String(original);
尤其是行byte[]original=cipher.doFinal(Base64.decodeBase64(input))代码>可能是导致问题的原因。我只是不明白为什么它不能与独立的.jar一起工作
编辑:我试图自己一步一步地调试jar。将堆栈跟踪打印到MsgBox并添加注释和其他内容以查看其停止位置。没有向我显示堆栈跟踪。它似乎正好停在这条线之前:
byte[]original=cipher.doFinal(Base64.decodeBase64(输入))
编辑2:加密工作正常。也在IDE之外。以下是部分:
public String encryptAES(String input, String key, String initVector)
{
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(input.getBytes());
return Base64.encodeBase64String(encrypted);
“could-maybe”没有帮助:(Q:您在IDE之外到底是如何调试的?“System.out.println()”跟踪语句??其他?您也可以显示加密部分吗?开始调试的时间到了。在调用“doFinal()”之前先打印“input”。例如:byte[]inputBytes=input.getString();System.out.println(“input=“+input”“,inputBytes.length=“+inputBytes.length”;byte[]encrypted=cipher.doFinal(inputBytes);
@kamino您如何知道该文件实际上已被读取?我在代码或问题中没有看到任何确认或证据。