Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
InvalidKeyException加密解密文件-Java/Android_Java_Exception_Aes_Encryption - Fatal编程技术网

InvalidKeyException加密解密文件-Java/Android

InvalidKeyException加密解密文件-Java/Android,java,exception,aes,encryption,Java,Exception,Aes,Encryption,我使用以下示例: 但是我得到了一个异常,当我记录异常时,它会出现在我的logcat中,声明:InvalidKeyException 我不确定我到底做错了什么。我还没有真正修改教程中的方法(也许这就是问题所在),所以我不确定为什么会出现这个错误 资料来源: 代码的一个问题是Cipher和SecretKeySpec实例的指定算法不同。您正在混合两种不同的算法 如参考示例中所示,对两个实例保持相同: 不正确的行: SecretKeySpec KS = new SecretKeySpec(KeyDat

我使用以下示例:

但是我得到了一个异常,当我记录异常时,它会出现在我的logcat中,声明:InvalidKeyException

我不确定我到底做错了什么。我还没有真正修改教程中的方法(也许这就是问题所在),所以我不确定为什么会出现这个错误

资料来源:
代码的一个问题是
Cipher
SecretKeySpec
实例的指定算法不同。您正在混合两种不同的算法

如参考示例中所示,对两个实例保持相同:

不正确的行:

SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("AES");
你可以考虑阅读AES和BoWFISH。

编辑:

SecretKeySpec KS = new SecretKeySpec(KeyData, "Blowfish");
Cipher cipher = Cipher.getInstance("AES");
如前所述,整个溶液中将严格使用AES。因此,您正在设置的密钥不是有效的AES密钥-AES密钥是128、192或256位(从您的异常中也可以看出)。这意味着您当前的密钥应该是16、24或32字节(尽管
testkey
是7字节)

考虑以下几点:

  • 遵循参考并将算法更改为Blowfish,它将接受您的密钥
  • 尝试将密钥更改为16字节(例如:
    ThisSecurityKey1
    )。您可以考虑字符编码(UTF-8、UTF-16),但因为您使用的是纯文本,所以应该可以工作
  • 查找类,用于生成对称密钥
  • 此类提供秘密(对称)密钥的功能 发电机


    另外,请尝试参考一个更好的AES加密示例-您选择的参考中充满了不符合的Java编码标准。

    您的代码的另一个问题是:

    while ((len1 = attachment.read(buffer)) > 0) {
        f.write(buffer);
    }
    
    这将在目标的末尾写入垃圾,除非大小是缓冲区大小的倍数。应该是:

    while ((len1 = attachment.read(buffer)) > 0) {
        f.write(buffer, 0, len1);
    }
    

    你贴的日志有点没用。有堆栈跟踪吗?具体来说,哪一行得到了错误?没问题-给我一点时间,我会重新发布它我不确定哪一行得到了它-我只知道它到达了这一行:}catch(InvalidKeyException异常){(出于某种原因,我在stacktrace中没有看到任何有用的东西)我刚刚意识到我没有正确运行stacktrace-上面显示了更新的stacktrace和其他信息谢谢!(这是一个可怕的错误)我更新了我的源代码并再次运行了它…我仍然得到了invalidkeyexception@user3183409你现在使用的是什么算法?我想异常的stacktrace会是一个StartStricly AES(我更新了上面的源代码)我现在发布stacktrace我发布了它-我没有看到任何有用的东西-你呢?Thread.currentThread().getStackTrace();应该可以实现这一点,对吗?
    while ((len1 = attachment.read(buffer)) > 0) {
        f.write(buffer, 0, len1);
    }