В этой теме много вопросов, это же решение, но это не работает для меня. У меня простой тест с шифрованием. Само шифрование/дешифрование работает (до тех пор, пока я обрабатываю этот тест с помощью массива байтов, а не как строки). Проблема в том, что вы не хотите обрабатывать его как массив байтов, а как String, но когда я кодирую массив байтов в строку и обратно, полученный массив байтов отличается от исходного массива байтов, поэтому дешифрование больше не работает. Я пробовал следующие параметры в соответствующих строковых методах: UTF-8, UTF8, UTF-16, UTF8. Ни один из них не работает. Результирующая байтная матрица отличается от оригинала. Любые идеи, почему это так?
Encrypter:
public class NewEncrypter
{
private String algorithm = "DESede";
private Key key = null;
private Cipher cipher = null;
public NewEncrypter() throws NoSuchAlgorithmException, NoSuchPaddingException
{
key = KeyGenerator.getInstance(algorithm).generateKey();
cipher = Cipher.getInstance(algorithm);
}
public byte[] encrypt(String input) throws Exception
{
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] inputBytes = input.getBytes("UTF-16");
return cipher.doFinal(inputBytes);
}
public String decrypt(byte[] encryptionBytes) throws Exception
{
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] recoveredBytes = cipher.doFinal(encryptionBytes);
String recovered = new String(recoveredBytes, "UTF-16");
return recovered;
}
}
Это тест, где я его пробую:
public class NewEncrypterTest
{
@Test
public void canEncryptAndDecrypt() throws Exception
{
String toEncrypt = "FOOBAR";
NewEncrypter encrypter = new NewEncrypter();
byte[] encryptedByteArray = encrypter.encrypt(toEncrypt);
System.out.println("encryptedByteArray:" + encryptedByteArray);
String decoded = new String(encryptedByteArray, "UTF-16");
System.out.println("decoded:" + decoded);
byte[] encoded = decoded.getBytes("UTF-16");
System.out.println("encoded:" + encoded);
String decryptedText = encrypter.decrypt(encoded); //Exception here
System.out.println("decryptedText:" + decryptedText);
assertEquals(toEncrypt, decryptedText);
}
}