为什么我不能解码来自Java环境下Android设备的字符串?
我使用Android设备用以下代码编写字符串: 安卓端,键长:2048为什么我不能解码来自Java环境下Android设备的字符串?,java,android,rsa,Java,Android,Rsa,我使用Android设备用以下代码编写字符串: 安卓端,键长:2048 //Init: need time private void prepareEncrypt(String publicKey) throws Exception { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey.getBytes())); KeyFactory keyFactor
//Init: need time
private void prepareEncrypt(String publicKey) throws Exception {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey.getBytes()));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
cp = Cipher.getInstance("RSA/ECB/OAEPWithSHA-512AndMGF1Padding");
cp.init(Cipher.ENCRYPT_MODE, pubKey);
}
//encrypt
private byte[] encryptByPublicKey(byte[] data) {
//data = Base64.getEncoder().encode(data);
byte[] result = new byte[0];
try {
result = cp.doFinal(data);
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
return result;
}
获取密文a
然后我尝试在elipse上用Java解码A:
public static byte[] decryptByPrivateKey(byte[] encrypted, byte[] privateKey) throws Exception {
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey keyPrivate = kf.generatePrivate(keySpec);
Cipher cp = Cipher.getInstance("RSA/ECB/OAEPWithSHA-512AndMGF1Padding");
cp.init(Cipher.DECRYPT_MODE, keyPrivate);
byte[] arr = cp.doFinal(Base64.getDecoder().decode(encrypted));
return arr;
}
我总是无法解码字符串
javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadOAEP(Unknown Source)
at sun.security.rsa.RSAPadding.unpad(Unknown Source)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
如果Android不更改对象密码上的转换参数,如:
RSA/ECB/NOP
RSA/ECB/PKCS1添加
RSA/ECB/OAEPHA-1和MGF1填充
RSA/ECB/OAEPHA-224和MGF1
RSA/ECB/OAEPHA-256和MGF1
RSA/ECB/OAEPHA-384和MGF1
RSA/ECB/OAEPHA-512和MGF1
如何成功解码密文A?需要:
OAEPParameterSpec oaepParameterSpecDec = new OAEPParameterSpec("SHA-512", "MGF1", new MGF1ParameterSpec("SHA-512"), PSource.PSpecified.DEFAULT);
...
cp.init(Cipher.DECRYPT_MODE, keyPrivate, oaepParameterSpecDec);
很明显,给我一个数字