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