Я делаю простую программу для шифрования/дешифрования с использованием RSA-алгоритма в Java. Я создаю объект шифра следующим образом:RSA Encryption/Decryption using Java
//Create a Cipher object
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding");
я шифрование с помощью вызова функции шифровать:
String cipher=encrypt(textByte, pair, rsaCipher);
System.out.println("The Encryption using RSA Algorithm : "+cipher);
И расшифровку как:
//Decryption
String plain=decrypt(Base64.decodeBase64(cipher),pair, rsaCipher);
System.out.println("The Decryption using RSA Algorithm : "+plain);
Когда я показываю вывод, выход дешифрования возвращает длинное пространство перед исходным текстом:
Однако, когда я редактирую код для создания объекта Cipher: // Создаем объект Cipher Cipher rsaCipher = Cipher.getInstance ("RSA");
т.е., удалены аргументы режима работы и отступов, проблема разрешится и выход становится:
Где проблема. В первом случае (когда появляется пробел), я указал NoPadding? Почему в расшифрованном сообщении появляются пробелы? Даже если я использовал прокладку, я ожидаю, что этого не произойдет.
EDIT: Это шифровать и дешифровать методы:
public static String encrypt(byte[] textBytes, KeyPair pair, Cipher rsaCipher) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
//get the public key
PublicKey pk=pair.getPublic();
//Initialize the cipher for encryption. Use the public key.
rsaCipher.init(Cipher.ENCRYPT_MODE, pk);
//Perform the encryption using doFinal
byte[] encByte = rsaCipher.doFinal(textBytes);
// converts to base64 for easier display.
byte[] base64Cipher = Base64.encodeBase64(encByte);
return new String(base64Cipher);
}//end encrypt
public static String decrypt(byte[] cipherBytes, KeyPair pair, Cipher rsaCipher) throws IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException
{
//get the public key
PrivateKey pvk=pair.getPrivate();
//Create a Cipher object
//Cipher rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding");
//Initialize the cipher for encryption. Use the public key.
rsaCipher.init(Cipher.DECRYPT_MODE, pvk);
//Perform the encryption using doFinal
byte[] decByte = rsaCipher.doFinal(cipherBytes);
return new String(decByte);
}//end decrypt
Можете ли вы показать нам свои методы 'encrypt' и' decrypt'? – Craigy