Blackberry RSA Decryption всегда висит - PullRequest
2 голосов
/ 02 марта 2012

Сегодня я работал с BB RSA Crypto и сумел успешно зашифровать строку (думаю, не могу расшифровать для тестирования). Моя проблема заключается в расшифровке. Я просмотрел форумы и перепробовал множество комбинаций кода, но, похоже, ничего не работает. Все вызовы для расшифровки зашифрованного текста висят / блокируют приложение.

Ну, я только пробовал на симуляторе, и он блокируется более 10 минут. Я предполагаю, что что-то не так.

Ниже я показываю свой код для шифрования и дешифрования строки. Любое понимание того, что не так с моей процедурой расшифровки, будет с благодарностью. Спасибо.

            cryptoSystem = new RSACryptoSystem(1024);
        byte[] expo = Base64InputStream.decode(exponent, 0, exponent.length());
        byte[] modul = Base64InputStream.decode(modulus, 0, modulus.length());


        byte[] pArr = Base64InputStream.decode(p, 0, p.length());
        byte[] qArr  = Base64InputStream.decode(q, 0, q.length());
        byte[] dpArr = Base64InputStream.decode(dp, 0, dp.length());
        byte[] dqArr = Base64InputStream.decode(dq, 0, dq.length());
        byte[] inverseQArr = Base64InputStream.decode(inverseQ, 0, inverseQ.length());
        byte[] dArr = Base64InputStream.decode(d, 0, d.length());


        // Public Key Setup
        RSAPublicKey publicKey = new RSAPublicKey( cryptoSystem, expo, modul);
        RSAEncryptorEngine eEngine = new RSAEncryptorEngine( publicKey );
        fEngine = new PKCS1FormatterEngine(eEngine);

        // Private Key Setup
        RSAPrivateKey privateKey = new RSAPrivateKey(cryptoSystem, expo, pArr, qArr, dpArr, dqArr, inverseQArr);
        dEngine = new RSADecryptorEngine(privateKey);
        ufEngine = new PKCS1UnformatterEngine(dEngine);

        // ################################ ENCRYPTION ################################
        BlockEncryptor cryptoStream = new BlockEncryptor( fEngine, out );   
        cryptoStream.write( data, 0, data.length );
        cryptoStream.close();
        out.close();
        // ################################ END ENCRYPTION ################################

        // Convert encrypted bytes to text;
        int finalLength = out.size();
        byte[] cipherText = new byte[finalLength];
        System.arraycopy(out.getByteArray(), 0, cipherText, 0, finalLength);
        cipherText = out.toByteArray();

        // ################################ DECRYPTION ################################
        ByteArrayInputStream inputStream = new ByteArrayInputStream(cipherText);
        byte[] plainText = new byte[finalLength];
        BlockDecryptor decryptor = new BlockDecryptor(new PKCS1UnformatterEngine(new RSADecryptorEngine(privateKey)), inputStream);
        decryptor.read(plainText, 0, finalLength); // THIS HANGS APP
        //IOUtilities.streamToBytes(decryptor); // AND ALSO THIS

        String strPlaintText = new String(plainText);
        // ################################ END DECRYPTION ################################

1 Ответ

2 голосов
/ 03 марта 2012

Обычно вы не шифруете текст напрямую, используя алгоритм RSA в качестве блочного шифра.Обычный способ - создать случайный симметричный / секретный ключ (например, AES), а затем использовать его для шифрования простого текста.Затем вы шифруете ключ AES, используя открытый ключ и шифрование RSA.Вы отправляете получателю зашифрованный простой текст и зашифрованный симметричный ключ AES.Сначала получатель расшифровывает ключ AES, а затем зашифрованный текст.

RSA медленный, очень медленный, особенно во время расшифровки.Поскольку открытый показатель обычно представляет собой короткое число с несколькими установленными битами (0x010001 - это четвертое число Ферма), поэтому шифрование все еще довольно быстрое.Расшифровка не выполняется, и у вас будут довольно большие издержки, поскольку зашифрованный текст будет по крайней мере на 11 байт короче, чем обычный текст, для каждого зашифрованного блока.

Не используйте RSA для блочного шифрования, используйте AESCBC со случайным IV & PKCS5Padding вместо.

...