Ситуация:
Мне нужно приложение, которое шифрует строку с помощью 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.
Буду признателен за любую помощь,
Большое спасибо.