密码在Android和Windows上的行为不同

时间:2015-01-15 15:29:37

标签: android encryption

我有一个小的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上正确显示。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是因为windows标准oracle vm使用符合美国法律的Oracle安全提供程序,默认设置非常差。

Android在实际版本中使用OpenSSL安全提供程序,在此之前使用BounceCastle安全提供程序。

两者都是impl。有不同的默认值。

这意味着当你得到一个带有" RSA"的实例时安全提供程序选择了RSA加密的默认值。

在android和windows桌面两侧提供完整的配置字符串

  

"算法/模式/填充"

例如:

  

RSA / ECB / PKCS1Padding