2015-01-15 54 views
0

我有一个小窗口应用程序,它使用RSA算法解密简单消息,但在Android上遇到同样的问题,看起来像我有密码问题。密码在Android和Windows上的行为有所不同

我在窗户上;

Cipher c = Cipher.getInstance("RSA"); 
c.init(Cipher.DECRYPT_MODE,_clientPrivateKey); 
byte [] r = c..doFinal(encrypted); 

在Android上,我用默认的“RSA”密码也是“RSA /无/ NoPadding”,“BC”

确信的是,_clientPrivateKey字节两个平台上相同的尝试,但注意到在Windows上,该键的类型解析为sun.security.rsa.RSAPrivateCrtKeyImpl,而在Android上则解析为OpenSSLRSAPrivateKey。

dofnal结果在两个平台上有所不同,在Windows上提供正确的。

有什么想法?

回答

2

那是因为windows标准的oracle虚拟机使用美国法律符合Oracle安全提供程序与默认很差。

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

Both impl。有不同的默认值。

这意味着当您使用“RSA”获取实例时,安全提供程序会选择RSA加密的默认值。

在两侧上提供Android和Windows桌面全配置字符串

“算法/模式/填充”

例如:

RSA/ECB/PKCS1Padding

+0

感谢您的快速响应...这是我的一个f首先在Java上加密项目,对于显而易见的问题感到抱歉。 – Duncan 2015-01-15 17:00:04

+0

这不是在不同的VM impl上使用加密和解密时每个人都会遇到的数字1错误。 – 2015-01-15 17:02:00

+0

我基本上试图解码生成的加密的私钥> openssl req -x509 -newkey rsa:2048 -keyout client-private.key -out client-public.pem 不能真正找到一个很好的方式来指定度算法。使用not-yet-commons-ssl将密钥文件读入_clientprivateKey。对算法/模式/填充使用的任何建议 – Duncan 2015-01-15 17:03:39

相关问题