我有一个小的Windows应用程序,使用RSA算法解密一个简单的消息,但在Android上遇到同样的问题,看起来我有一个密码问题。
在我的窗户上;
Cipher c = Cipher.getInstance("RSA");
c.init(Cipher.DECRYPT_MODE,_clientPrivateKey);
byte [] r = c..doFinal(encrypted);
在Android上我尝试使用默认的“RSA”密码,但也尝试使用“RSA / None / NoPadding”,“BC”
确保_clientPrivateKey字节在两个平台上都相同,但注意到在Windows上,密钥的类型被解析为sun.security.rsa.RSAPrivateCrtKeyImpl,而在android上它解析为OpenSSLRSAPrivateKey。
doFnal结果在两个平台上有所不同,在Windows上正确显示。
有什么想法吗?
答案 0 :(得分:2)
这是因为windows标准oracle vm使用符合美国法律的Oracle安全提供程序,默认设置非常差。
Android在实际版本中使用OpenSSL安全提供程序,在此之前使用BounceCastle安全提供程序。
两者都是impl。有不同的默认值。
这意味着当你得到一个带有" RSA"的实例时安全提供程序选择了RSA加密的默认值。
在android和windows桌面两侧提供完整的配置字符串
"算法/模式/填充"
例如:
RSA / ECB / PKCS1Padding