Привет, я искал ответы в переполнении стека. Но все это не работает. Не могли бы вы мне помочь.Как правильно преобразовать String в байт [] при шифровании/расшифровке текста в android? (Ошибки - WRONG_FINAL_BLOCK_LENGTH и IllegalBlockSizeException)
Я хотел бы сделать шифрование и расшифровку текста в android. Мне нравится делать это как можно проще. Сначала я написал код в java eclipse. Он работает нормально, но если я передам его в Android Studio, есть пара ошибок.
Я должен передать байт [] в строку, потому что я использую Firebase и это не поддерживает хранение объекта класса с байтами []
Я стараюсь работать с this hint, и многие другие, но у меня есть только неудачи.
generateKey()
private static SecretKey generateKey() throws Exception
{
SecretKey key = new SecretKeySpec(org.apache.commons.codec.binary.Hex.decodeHex(klucz.toCharArray()), "AES");
return key;
}
шифровать (сбщ)
public String encrypt(String messageText)
{
try
{
byte[] data = messageText.getBytes("UTF-8");
IvParameterSpec iv = new IvParameterSpec(iv_.getBytes("UTF-8"));
SecretKeySpec key = (SecretKeySpec) generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] textBytes = cipher.doFinal(messageText.getBytes("UTF-8"));
String textString = Base64.encodeToString(textBytes, Base64.DEFAULT);
return textString;
}
catch (Exception ex)
{
ex.printStackTrace();
}
return null;
}
расшифровывать (сбщ)
public String decrypt(String msgText)
{
try
{
byte[] data = msgText.getBytes("UTF-8");
IvParameterSpec iv = new IvParameterSpec(iv_.getBytes("UTF-8"));
SecretKeySpec skeySpec = (SecretKeySpec) generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(data);
String textString = new String(original, "UTF-8");
return textString;
}
catch (Exception ex)
{
ex.printStackTrace();
}
return null;
}
Когда я STH Li ка этого я получил ошибку:
WRONG_FINAL_BLOCK_LENGTH
Когда я пытаюсь изменить его на простой AES с
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
Я получил сообщение об ошибке:
IllegalBlockSizeException:
Получаете ли вы WRONG_FINAL_BLOCK_LENGTH в расшифровке? Вы также должны показать свой полный метод дешифрования, включая код, который удаляет base64 перед расшифровкой. –
Мой дешифр похож на шифрование, но я редактировал оригинальную запись. – Kainka
Как и ожидалось .. ошибка - это отсутствие base64-декодирования в расшифровке .. :) –