Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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/3/android/234.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
Java加密问题_Java_Android_Encryption - Fatal编程技术网

Java加密问题

Java加密问题,java,android,encryption,Java,Android,Encryption,我在Android应用程序上使用PBE加密来加密和解密一些文本,但我得到了BadPaddingException:当我使用错误的私钥解密文本时,会出现“pad block corrupted”消息。 我的问题是,由于我不熟悉Java中的加密,这是否是加密API的正常行为,因为在输入错误密钥的情况下,我需要做一些逻辑,但我不知道私钥,也不将其存储在任何地方(仅存储加密和解密的检查文本) 谢谢, Mihai简言之,是的,如果在解密过程中使用了错误的密码/密钥,则BadPaddingException

我在Android应用程序上使用PBE加密来加密和解密一些文本,但我得到了BadPaddingException:当我使用错误的私钥解密文本时,会出现“pad block corrupted”消息。 我的问题是,由于我不熟悉Java中的加密,这是否是加密API的正常行为,因为在输入错误密钥的情况下,我需要做一些逻辑,但我不知道私钥,也不将其存储在任何地方(仅存储加密和解密的检查文本)

谢谢,
Mihai

简言之,是的,如果在解密过程中使用了错误的密码/密钥,则BadPaddingException是您应该想到的


编辑:但正如其他人所指出的,这不应该在解密代码之外进行通信。这只是知道使用了不正确的键的一种方式。

是的,不太理想()。解密逻辑需要在到达实际的密码文本之前去掉填充,并且在早期阶段会出现问题

大多数键不匹配会导致“错误填充错误”,这是正常的。但这也不是100%万无一失。例如,在使用PKCS#5填充(填充数据的一种非常常见的方式)的对称加密的情况下,大约0.4%的错误密钥不会导致错误的填充。解密后的数据仍然是垃圾,但是,出于意外的机会,垃圾最终以有效的填充结束。您的应用程序不能明确说明解密失败是由于错误的填充,还是由于异常有效的填充造成的垃圾:该信息(密钥是否是产生正确填充的0.4%密钥的一部分)是一个泄漏,可能会产生严重后果。有一些针对SSL连接的攻击是通过这种方式进行的。

感谢Thomas提供的信息,这意味着如果我想检查私钥的有效性,我应该处理BadPaddingException作为私钥无效的证明,但是还要检查解密的结果是否是预期的,或者仅仅是由于异常有效的填充而产生的垃圾。这样,我就可以防止密钥无效但检查数据被解密的情况。是的。对于更完整的处理,考虑添加MAC(消息认证代码——这有点像一个带有密钥的校验和)。