【发布时间】:2017-10-30 20:34:11
【问题描述】:
我有以下问题:
我使用 RSA 私钥来加密给定的纯文本。我想通过不安全的通道将其发送到另一个应用程序。另一个应用程序只知道公钥。
中间人是否有可能更改密文的部分内容,以便解密得到修改后的文本?
我自己在我的 Java 应用程序中尝试过这个,但如果我这样做,我总是会得到 p>
javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380) ~[na:1.8.0_131]
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291) ~[na:1.8.0_131]
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356) ~[sunjce_provider.jar:1.8.0_112]
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389) ~[sunjce_provider.jar:1.8.0_112]
at javax.crypto.Cipher.doFinal(Cipher.java:2048) ~[na:1.8.0_121]
我在我的 Java 应用程序中使用算法“RSA/ECB/PKCS1Padding”进行加密和解密。
问候
【问题讨论】:
-
取决于您使用的填充算法。但我不认为填充旨在用作完整性检查。
-
您使用的是哪种填充算法?
-
更新问题。
-
@PeterBruins 是正确的,pkcs#1 块类型 1 填充不打算用作加密完整性检查。对输出的随机更改不太可能导致由当前版本的 Oracle 提供程序进行有效解密,但密码分析者很聪明,并且会做一些更聪明的事情。例如,他们可能将两个或多个密文相乘以 mod N。
-
“我使用 RSA 私钥加密给定的纯文本。”。你应该停止right there。使用 RSA 私钥加密不是签名生成并且它也不提供消息的机密性;它不是一个安全的密码。您使用公钥加密并使用私钥解密,句号。
标签: encryption rsa private-key