我想在android studio应用程序中创建几个java函数。这些函数的目的是开始能够通过RSA加密发送加密消息。
我首先生成两个键。然后我使用公共加密我的消息,它的工作原理。然后,我将加密的消息从byte []转换为String(),因为我想通过SMS发送消息。 所有这些部件都有效。然后我尝试重用我应该在短信中收到的短信,但它不起作用。我得到以下错误:
"javax.crypto.BadPaddingException: Decryption error" <br/>
在这一行:
&#34; descryptedData = cipher.doFinal(decrypt); &#34; //(参见下面的代码)
我使用 .toString()函数将从字节加密的消息转换为String。如果我跳过我从字节转换为字符串以发送SMS而从字符串转换为字节以解密数据的部分,它可以很好地工作。
以下是您可能感兴趣的代码部分:
PrivateKey privateKey = null;
privateKey = appMob.getPrivKey(keys[1]); //return the privatekey
System.out.println("\n--- Decryption started--- \n");
byte[] descryptedData = null;
try{
byte[] decrypt = smsWithCryptedData.getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,privateKey);
descryptedData = cipher.doFinal(decrypt);
String smsFinal = new String(descryptedData);
System.out.println("decrypt \n smsFinal");
}catch(Exception e)
{
e.printStackTrace();
}
我认为错误来自将String转换为字节和字节转换为字符串,但我不知道如何解决它。有人有想法吗?
答案 0 :(得分:1)
通常人们使用类似base64编码器/解码器的东西来将字节数组转换为字符串,因为简单的转换为UTF-8可能会丢失一些数据,没有人可以保证随机字节序列具有正确的表示形式为UTF-8字符串
例如,查看一个关于android的例子,它有点不同的问题,但我相信你需要完全相同的答案。 Alternatives for DatatypeConverter in Android