Android中的加密-Java中的解密

Android中的加密-Java中的解密,java,android,encryption,cryptography,Java,Android,Encryption,Cryptography,我正在尝试在Android设备(客户端)和Java服务器(我的笔记本电脑作为普通服务器工作)之间实现客户端-服务器体系结构。我正在尝试实现RSA算法来加密客户端发送的数据,并在服务器上解密。发送时,我首先将加密数据更改为Base 64字符串,如下所示: 客户: 我将cipherStr发送到服务器,在那里我使用以下代码对其进行解密 服务器: byte[] decryptedData = null; System.out.println("Before Decryption:");

我正在尝试在Android设备(客户端)和Java服务器(我的笔记本电脑作为普通服务器工作)之间实现客户端-服务器体系结构。我正在尝试实现RSA算法来加密客户端发送的数据,并在服务器上解密。发送时,我首先将加密数据更改为Base 64字符串,如下所示: 客户:

我将
cipherStr
发送到服务器,在那里我使用以下代码对其进行解密

服务器:

    byte[] decryptedData = null;
    System.out.println("Before Decryption:");
    System.out.println(tmp);

    byte [] byteArray = Base64.decode(tmp);

    try {
        privKey = pair.getPrivate();
        //  System.out.println("PRIVATE KEY IN FUNCTION"+privKey);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privKey);
        // System.out.println(new String(byteArray, StandardCharsets.UTF_8));

        decryptedData = cipher.doFinal(byteArray);
        System.out.println("Decrypted Data: ");
        sentToDB = new String(decryptedData, StandardCharsets.UTF_8);
    }
然而,在服务器端,我收到了BadPaddingException

错误:

javax.crypto.BadPaddingException: Decryption error
    at sun.security.rsa.RSAPadding.unpadV15(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)
    at javax.crypto.Cipher.doFinal(Cipher.java:2121)
    at sslservefr.simplesslserver$clientThread.run(simplesslserver.java:175)
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at sslservefr.simplesslserver$clientThread.run(simplesslserver.java:198)
有人能帮忙吗?我如何前进? 我读了几个问题,包括。。但是没有帮助

编辑: 我发现Android只发送了一半的加密文本

Android O/p:

11-22 13:44:21.530: W/Cipher String(2056): WRsALdJsVgIHqbg5x3ouYGsSwRKk5209lvyr4V8k1sj5IED9nSOoxTF3u9Ioz21l0oK5yOmtHeW4
11-22 13:44:21.530: W/Cipher String(2056): i1azUDYd+qD3Emtau8gEwJaYLOGfSgyhEtw4pbHSY2Nedp3iyqHahKyDcyxFSEWzSnOEMBRZInh8
11-22 13:44:21.530: W/Cipher String(2056): v0DyxAvRm8T8lxI5yVc=
我在Java中收到的信息:

received: WRsALdJsVgIHqbg5x3ouYGsSwRKk5209lvyr4V8k1sj5IED9nSOoxTF3u9Ioz21l0oK5yOmtHeW4
这只是第一行。我不知道为什么?如果我以字符串形式存储整个“encryptedData”并将其发送到服务器。。为什么Java服务器只接收第一行

请帮帮我!!!:(

EDIT2:因为Android会拆分数据,所以我在服务器端执行了以下操作:

           String l1 = br.readLine();
           String l2 = br.readLine();
           String l3 = br.readLine();
           tmp = l1+l2+l3;
现在我在服务器上接收到的数据与客户端发送的数据完全相同,但仍然会收到相同的错误

从客户端发送的加密字符串:

RpFC6Jq1bqH3IVjfQy91QlZ7C+btMkUQhZ5/HQWdC8LwRSaJlU63hEOHPzDltTpfV6u260MhhfwyNYuFbMS7WbFnpHLGMxR+WOPsZirG5Xr6QVm+b19bbZYgqDYxpaflvSRs2CnBQtKWFSsVg4nC9n6ICrhsQEhkA39P11IYt+U=
服务器上接收到的字符串:

RpFC6Jq1bqH3IVjfQy91QlZ7C+btMkUQhZ5/HQWdC8LwRSaJlU63hEOHPzDltTpfV6u260MhhfwyNYuFbMS7WbFnpHLGMxR+WOPsZirG5Xr6QVm+b19bbZYgqDYxpaflvSRs2CnBQtKWFSsVg4nC9n6ICrhsQEhkA39P11IYt+U=

请提供帮助。

这看起来像是两个单独的异常连接在一起。是的!NumberFormatException是当我使用JDBC将数据发送到数据库时出现的。请忽略这一部分。很抱歉造成混淆。知道这里会出什么问题吗?我尝试发送encryptedData(不使用Base64)所以问题不在于Base64编码解码(我最初的猜测)。在编码时使用Base64.NO_WRAP而不是Base64.DEFAULT,以避免在编辑2中执行浓缩操作,因此结果它失败了,因为我只发送了3位数据。我向它添加了一个字符串,encrpyted-sent-receive-decrypted-remove extra string part,并使用了它。我知道这不是最好的方法,但它达到了目的。感谢您的帮助救命啊!:-)
RpFC6Jq1bqH3IVjfQy91QlZ7C+btMkUQhZ5/HQWdC8LwRSaJlU63hEOHPzDltTpfV6u260MhhfwyNYuFbMS7WbFnpHLGMxR+WOPsZirG5Xr6QVm+b19bbZYgqDYxpaflvSRs2CnBQtKWFSsVg4nC9n6ICrhsQEhkA39P11IYt+U=