Dyl*_*les 10 java android cross-platform encryption-asymmetric public-key-encryption
情况
我正在使用Java中的RSA加密.我正在尝试加密配备Cyanogenmod的Android 2.2的HTC Saphire(32B)开发人员手机上的数据,然后在运行Mandriva Linux 2010的64位服务器上解密所述数据.我在两台机器上使用相同的公钥,私钥对,可以正确加密/解密Android手机上的数据,可以正确加密/解密Linux服务器上的数据,但我无法加密手机上的数据,然后在服务器上解密.我得到了糟糕的填充异常.我已经确认电话正在正确发送数据,并且服务器正在正确解析数据.因此,我无法弄清楚为什么解密失败.谁能帮我这个?也许Java中的RSA算法有一些关于字大小的潜在假设?
更多的信息:
其他问题
唷!我想就是这样.感谢您的帮助!
Chr*_*son 12
无论环境如何,RSA加密(或任何加密算法)都应该有效.但是,某些系统可能对默认填充和操作模式做出不同的假设.确保在执行加密和解密时不仅要完全指定算法,还要指定操作模式(CBC等)和填充.如果这不起作用,我建议从设备和服务器发布您的代码,以便我们可以更仔细地检查它.
编辑为了解决您的问题,在Java中,当您从加密包中获得密码时,通常使用以下代码执行此操作:
Cipher cipher;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Run Code Online (Sandbox Code Playgroud)
提供的字符串用于getInstance指示运行时获取将使用AES算法,密码块链接操作模式和PKCS5填充的密码实例.有许多支持的算法和填充.我将从Oracle查看此文档,以获取有关Java加密的更多信息.
更具体地说,用于请求密码的字符串采用格式
<algorithm>/<mode of operation>/<padding>
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,尽管Java提供了许多算法,操作模式和填充,但并非所有算法都可以协同工作.您需要阅读文档以查找可行的配置字符串.