麻烦将字符串转换为字节为" RSA"加密(Java)

时间:2017-06-10 16:53:22

标签: java encryption cryptography rsa

我想在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转换为字节和字节转换为字符串,但我不知道如何解决它。有人有想法吗?

1 个答案:

答案 0 :(得分:1)

通常人们使用类似base64编码器/解码器的东西来将字节数组转换为字符串,因为简单的转换为UTF-8可能会丢失一些数据,没有人可以保证随机字节序列具有正确的表示形式为UTF-8字符串

例如,查看一个关于android的例子,它有点不同的问题,但我相信你需要完全相同的答案。 Alternatives for DatatypeConverter in Android