Шифрование строки RSA в Android

Ситуация:

Мне нужно приложение, которое шифрует строку с помощью RSA. У меня открытый ключ хранится в res / raw, и, поскольку ключ составляет 1024 бита, результирующая строка должна быть длиной 128 байт. Однако результирующая строка после шифрования имеет длину 124, и в результате происходит сбой дешифрования.

Для восстановления открытого ключа я использую следующую функцию:

private PublicKey getPublicKey() throws Exception {
    InputStream is = getResources().openRawResource(R.raw.publickey);
    DataInputStream dis = new DataInputStream(is);
    byte [] keyBytes = new byte [(int) is.available()];
    dis.readFully(keyBytes);
    dis.close();

    X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    return kf.generatePublic(spec);
}

И код функции, которую я использую для шифрования :

private String rsaEncrypt (String plain) {

    byte [] encryptedBytes;
    Cipher cipher = Cipher.getInstance("RSA");
    PublicKey publicKey = getPublicKey();
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    encryptedBytes = cipher.doFinal(plain.getBytes());
    String encrypted = new String(encryptedBytes);
    return encrypted;

}

PD: Код отлично работает в настольном приложении, просто вылетает в Android.

Буду признателен за любую помощь,

Большое спасибо.

6
задан Ullfoll 5 March 2011 в 20:00
поделиться