bso*_*bat 26 java encryption android rsa public-key-encryption
我使用RSA加密Android上的用户名和密码,并在服务器上解密它们(tomcat 6,java 1.6).Android加密:
PublicKey pubKey = readPublicKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Run Code Online (Sandbox Code Playgroud)
Java Tomcat解密:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Run Code Online (Sandbox Code Playgroud)
如果我使用android部分OUTSIDE android(只是在主方法)它工作正常.但不在我的android(模拟器)里面.在服务器端,我收到以下错误:
javax.crypto.BadPaddingException: Blocktype mismatch: 0
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)
我将mod和ex保留为BigIntegers常量,因此我不将它们写入文件中.我知道java1.6和java 1.5加密之间存在差异,因此两者都是用java 1.6编译的.
一些调试信息:
在android中调试期间,我可以看到pubKey包含十六进制的模数和指数.如果我在main方法中调试(同样的代码),我可以看到pubKey包含十进制的模数和指数.
我究竟做错了什么?
谢谢
bli*_*uff 42
我在Android 2.2+中进行RSA加密,并在tomcat 6 java 1.6服务器上解密.
我得到了这个确切的问题,阅读了整个地方,部分归功于@Femi的回答,我遇到了我需要的东西.
解决方案是使用Cipher的以下算法规范:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Run Code Online (Sandbox Code Playgroud)
这适用于从Android和BlackBerry智能手机进行加密.我知道问题被问到已经过去了四个月,但以防其他人遇到这个问题.
Fem*_*emi 11
我建议你使用特定的密码初始化:例如,
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
Run Code Online (Sandbox Code Playgroud)
将同时适用于两者.您将获得异常(BadPaddingException),因为桌面JVM和Android JVM之间的默认密码初始化填充似乎不同.
小智 2
首先,看起来您正在使用公钥初始化两个密码。加密使用公钥,解密使用私钥。我希望这只是一个错字。
我在 RSA 加密方面也遇到了很多麻烦,大部分都是反复试验。我建议您尝试其他提供商。我设法使用 BouncyCastle 实现 RSA。
Cipher wrapper = Cipher.getInstance("RSA", "BC");
wrapper.init(Cipher.ENCRYPT_MODE, publicKey);
encryptedData= wrapper.doFinal(unencryptedData);
Run Code Online (Sandbox Code Playgroud)
不过,我生成了自己的密钥对,因为这是会话加密。
kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.genKeyPair();
publicKey = kp.getPublic();
privateKey = kp.getPrivate();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23781 次 |
| 最近记录: |