Java中的RSA加密:跨平台问题?
情况
我正在使用Java中的RSA加密.我正在加载配备Cyanogenmod的Android 2.2的HTC Saphire(32B)开发者手机上的数据,然后在运行Mandriva Linux 2010的64位服务器上解密所述数据.我在两台机器上使用相同的公钥,私钥对,可以正确加密/解密Android手机上的数据,可以正确加密/解密Linux服务器上的数据,但是我无法加密手机上的数据,然后在服务器上对其进行解密.我得到不良的填充例外.我已经确认通过电话正确发送数据,服务器正在正确解析.因此,我无法弄明白为什么解密失败.谁能帮我这个?也许Java中的RSA算法有一些关于字大小的基础假设? 更多信息: >我的加密/解密库是基于here.的指南 其他问题 >还有其他免费的公钥加密算法/库可用于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提供了许多算法,操作模式和填充,但并不是所有的算法都可以一起工作.您将需要阅读文档以找到可以正常工作的配置字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |