导航:首页 > 编程语言 > javaandroidrsa加密

javaandroidrsa加密

发布时间:2025-07-27 09:13:19

androidjava webservice RSA处理的不同

android和java webservice RSA处理的不同

1.andorid机器上生成的(密钥对由服务器在windows xp下生成并将公钥发给客户端保存)密码无法在服务器通过私钥解密。

2.为了测试,在服务器本地加解密正常,另外,在android上加解密也正常,但是在服务器中加密(使用相同公钥)后的密码同样无法在android系统解密(使用相同私钥)。
3.由于对RSA加密算法不了解,而且对Java RSA的加密过程也不清楚、谷歌一番,才了解到可能是加密过程中的填充字符长度不同,这跟加解密时指定的RSA算法有关系。
4. 比如,在A机中使用标准RSA通过公钥加密,然后在B系统中使用“RSA/ECB/NoPadding”使用私钥解密,结果可以解密,但是会发现解密后的原文前面带有很多特殊字符,这就是在加密前填充的空字符;如果在B系统中仍然使用标准的RSA算法解密,这在相同类型的JDK虚拟机环境下当然是完全一样的,关键是android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。
5.更形象一点,在加密的时候加密的原文“abc”,直接使用“abc”.getBytes()方法获得的bytes长度可能只有3,但是系统却先把它放到一个512位的byte数组里,new byte[512],再进行加密。但是解密的时候使用的是“加密后的密码”.getBytes()来解密,解密后的原文自然就是512长度的数据,即是在“abc”之外另外填充了500多字节的其他空字符。

② android和java webservice RSA处理的不同

1.最近做RSA加密用于增强android客户机与服务器(JavaEE)数据传输的安全性。发现在andorid机器上生成的(密钥对由服务器在windows xp下生成并将公钥发给客户端保存)密码无法在服务器通过私钥解密。

2.为了测试,在服务器本地加解密正常,另外,在android上加解密也正常,但是在服务器中加密(使用相同公钥)后的密码同样无法在android系统解密(使用相同私钥)。

3.由于对RSA加密算法不了解,而且对Java RSA的加密过程也不清楚、谷歌一番,才了解到可能是加密过程中的填充字符长度不同,这跟加解密时指定的RSA算法有关系。

4.比如,在A机中使用标准RSA通过公钥加密,然后在B系统中使用“RSA/ECB/NoPadding”使用私钥解密,结果可以解密,但是你会发现解密后的原文前面带有很多特殊字符,这就是在加密前填充的空字符;如果在B系统中仍然使用标准的RSA算法解密,这在相同类型的JDK虚拟机环境下当然是完全一样的,关键是android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。

5.更形象一点,在加密的时候加密的原文“abc”,你直接使用“abc”.getBytes()方法获得的bytes长度可能只有3,但是系统却先把它放到一个512位的byte数组里,new byte[512],再进行加密。但是解密的时候你使用的是“加密后的密码”.getBytes()来解密,解密后的原文自然就是512长度的数据,即是在“abc”之外另外填充了500多字节的其他空字符。

引用:

Afters some hours of trying, confirming that the key pairs are the same, using different options of saving the public key in the Android filesystem, etc. I finally found a post stating that Android is using the Bouncycastle Security provider. Bouncycastle’s default RSA implementation is: “RSA/None/NoPadding”, whereas Sun’s default security provider implementation is “RSA/None/PKCS1Padding”. So, no decryption possible when just using

Cipher.getInstance("RSA")
because of the different paddings used.

So for a solution I downloaded the bouncycastle Jar, added bounycastle as a Security provider to my Java App, and now use

Cipher.getInstance("RSA", "BC");
It works fine now.

EOF.这位仁兄分析说android系统的RSA实现是"RSA/None/NoPadding",而标准JDK实现是"RSA/None/PKCS1Padding" ,这造成了在android机上加密后无法在服务器上解密的原因(服务器使用的是SUN JDK6.0)。

我自己的总结:其实只要加载bouncycastle Jar到PC服务端和android客户端即可。

另外

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());

所有getInstantce方法里必须写成如上形式才可。

阅读全文

与javaandroidrsa加密相关的资料

热点内容
java把图片转换成流 浏览:674
怎么能找到游戏主角文件夹 浏览:33
恶魔城java 浏览:539
javaredis订阅 浏览:340
源码编缉器怎么做计算题 浏览:952
android经典布局 浏览:237
php54redis扩展 浏览:698
美国手机服务器地址 浏览:603
承台连系梁加密吗 浏览:689
cad2010画图命令浮框 浏览:677
成都溯源码燕窝礼品 浏览:305
苹果app里有钱怎么转区 浏览:336
cmfcpdf 浏览:652
ios单片机串口 浏览:702
修改phpfpm用户 浏览:604
python正则模块教学 浏览:464
宅兔的app叫什么 浏览:790
phpstormlinux破解 浏览:519
跑马灯的设计单片机 浏览:520
吉他书pdf 浏览:346