Java中的RSA加密:跨平台问题?

前端之家收集整理的这篇文章主要介绍了Java中的RSA加密:跨平台问题?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
情况

我正在使用Java中的RSA加密.我正在加载配备Cyanogenmod的Android 2.2的HTC Saphire(32B)开发者手机上的数据,然后在运行Mandriva Linux 2010的64位服务器上解密所述数据.我在两台机器上使用相同的公钥,私钥对,可以正确加密/解密Android手机上的数据,可以正确加密/解密Linux服务器上的数据,但是我无法加密手机上的数据,然后在服务器上对其进行解密.我得到不良的填充例外.我已经确认通过电话正确发送数据,服务器正在正确解析.因此,我无法弄明白为什么解密失败.谁能帮我这个?也许Java中的RSA算法有一些关于字大小的基础假设?

更多信息:

>我的加密/解密库是基于here.的指南
>我的加密密钥长度为2048位,但是我看到与不同密钥大小相似的行为.
>我将我的RSA加密/解密代码打包成一个jar文件.它是通过Eclipse在服务器的机器上编译的.
>在Android手机上使用加密库的程序使用上述库.它也是使用Eclipse构建的.
>服务器程序是使用Netbeans构建的(因为这样做更容易).

其他问题

>还有其他免费的公钥加密算法/库可用于Java?他们跨平台工作吗?他们期待什么表现?等等,我已经研究了,没有发现太多;也许我正在查找错误的关键字.

唷!我想是这样.感谢您的帮助提前!

解决方法

无论环境如何,RSA加密(或任何加密算法)都应该工作.然而,某些系统有可能对默认填充和操作模式做出不同的假设.确保执行加密和解密时,您不仅可以完全指定算法,还可以完全指定操作模式(CBC等)和填充.如果这样做不起作用,我建议您从设备和服务器发布您的代码,以便我们更仔细地检查.

编辑为了解决您的问题,在Java中,当您从加密包中获取密码时,您通常使用以下代码

Cipher cipher;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

提供给getInstance的字符串指示运行时获取将使用AES算法,密码块链接操作模式和PKCS5填充的密码实例.有一些支持的算法和填充.我将在this document from Oracle中查看有关Java中加密的更多信息.

更具体地说,用于请求密码的字符串是格式

<algorithm>/<mode of operation>/<padding>

更糟糕的是,尽管Java提供了许多算法,操作模式和填充,但并不是所有的算法都可以一起工作.您将需要阅读文档以找到可以正常工作的配置字符串.

猜你在找的Java相关文章