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