Android расшифровывает RSA вернул граблированный код до значимого результата - PullRequest
0 голосов
/ 20 июня 2019

Я дешифрую зашифрованное сообщение RSA на Android, оно вернулось

,+�Y����oz���L�͡�Jp:S�&-A^����\ԅ<�)�B�5Nf�J �$�^E�z<��yE�l����c� ���T�+�,yw�3愶���U�WM���g�$����123

123 - это то, что я зашифровал, однако, когда я запускаю тот же самый код дешифрования на Java-сервере, он может вернуть неверный результат, вот мой расшифрованный код.

public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey)
            throws Exception {
        byte[] keyBytes = Base64.decode(privateKey);
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, privateK);
        int inputLen = encryptedData.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offSet = 0;
        byte[] cache;
        int i = 0;
        while (inputLen - offSet > 0) {
            if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
                cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
            }
            out.write(cache, 0, cache.length);
            i++;
            offSet = i * MAX_DECRYPT_BLOCK;
        }
        byte[] decryptedData = out.toByteArray();
        out.close();
        return decryptedData;
    }

1 Ответ

0 голосов
/ 20 июня 2019

Используйте Base64 с NO_WRAP для декодирования и кодирования.

Base64.encodeToString(encryptedBytes, Base64.NO_WRAP)
Base64.decode(encryptedData, Base64.NO_WRAP)
...