GFa*_*con 2 encryption android openssl rsa
我试图使用我的设备上生成的RSA密钥解密我的Android应用程序中的字符串.加密是由php服务完成的,使用我的应用程序提供的public rsa密钥.我的问题是解密,但失败了.
我正在做以下事情:
在Android上生成KeyPair(使用KeyPairGenerator.getInstance("RSA")) - >确定
两个密钥(公共和私有)在使用Base64.encode(pubKey.getEncoded())进行"base64"编码后保存到文件中,并与私钥相同. - >好的
当我调用我的webservice时,我将我的公钥(在base 64中)传递给post变量 - > OK
Web服务(php服务)使用openssl_public_encrypt函数使用公钥加密短字符串.加密的字符串将转换为base64. - >好像,函数不返回FALSE.
应用程序检索服务的结果,并对其进行解码(Base64.decode()) - > OK(我已检查,收到的字节与openssl_public_encrypt()函数生成的字节匹配)
最后一件事是解密这个字符串,我正在做以下事情: - >不行
密码密码= Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,privateKey);
byte [] decryptedBytes = cipher.doFinal(cryptedBytes);
String decryptedString = new String(decryptedBytes);
的System.out.println(decryptedString);
解密的结果与我的原始字符串不匹配.
我错过了什么?
Maa*_*wes 10
OpenSSL padding = OPENSSL_PKCS1_PADDING默认使用.因此,要在两侧使用相同的填充机制,您应该使用Cipher.getInstance("RSA/ECB/PKCS1Padding").这也是您可以在Java SE中使用的内容.
请注意,依赖于加密中的默认操作模式非常危险.许多实现具有不同的默认值,并且这些默认值很难查找.因此,请始终尝试完全指定要使用的算法/模式.
您可以尝试其他RSA填充模式,但请注意 - 不幸的是 - Android已经禁用了他们调整的Bouncy Castle源代码中的许多算法和别名.
[编辑]这是一个古老的答案,现在强烈建议使用OAEP填充,或者使用RSA-KEM进行混合密码术.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |