Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从.txt文件解密Java AES仅在IDE中有效_Java_Encryption_Jar_Aes - Fatal编程技术网

从.txt文件解密Java AES仅在IDE中有效

从.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

我正在做一个简单的Java程序,它从一个.txt文件中读取AES加密的文本,然后对其进行解密,将其打印到一个文本框中。我在IDE中进行了测试,一切都正常。但是,如果我构建一个.jar并打开它,文本框中不会添加任何文本。 它确实找到了.txt文件,它确实读取了文本,但我认为解密部分有问题

    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您如何知道该文件实际上已被读取?我在代码或问题中没有看到任何确认或证据。