Расшифруйте строку, закодированную с использованием AES 256 - PullRequest
0 голосов
/ 24 октября 2018

Здесь абсолютно нуб безопасности.

Мне нужно расшифровать полученную строку, закодированную в Base64.Все, что у меня есть, это строка, которую мне нужно расшифровать, и строка, которую служба, которая отправляет мне строку для декодирования, называет это семенем.

Исходя из того, что я прочитал здесь и в других местах, я имеюthis:

public String decrypt(String message) throws Exception
{
    String salt = "PRUEBA";
    Cipher c = Cipher.getInstance("AES");
    SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES");
    c.init(Cipher.DECRYPT_MODE, key);
    byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
    byte[] decValue = c.doFinal(decordedValue);
    String decryptedValue = new String(decValue);
    String decoded=new String(Base64.decode(decryptedValue,Base64.DEFAULT));
    return decoded;
}

Возвращает java.security.InvalidKeyException: длина ключа не 128/192/256 бит.

Я также пытался эта библиотека, но она возвращаетIllegalBlockSizeException: последний блок не завершен в расшифровке

Не знаю, нужно ли мне что-то еще со стороны сервера, поскольку я сказал, что почти ничего не знаю о шифровании.

Я полностью потерян вЭта проблема.Вы можете мне помочь?

Спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

У вашего кода много проблем, и вам не хватает важной информации (вы можете запросить в системе, отправляющей данные)

Вам не хватает шифра, IV (опционально) и ключа

Cipher c = Cipher.getInstance ("AES");

Использование только AES шифра без параметра IV означает, что вы используете AES/ECB/PKCS5Padding шифр.Вы уверены, что предполагаете использовать этот шифр?Разве это не должно быть AES/CBC/PKCS5Padding?Спросите систему, выполняющую шифрование, каким должно быть шифрование (включая режим и заполнение).Знания, что это AES, может быть недостаточно.

Если для используемого режима требуется IV (вектор инициализации), вам необходимо знать его значение.Обычно IV - это 128 бит (16 байт), добавленный к зашифрованному тексту, но вам нужно знать это наверняка.

String salt = "PRUEBA";SecretKeySpec key = new SecretKeySpec (salt.getBytes (), "AES");

И - вам нужен ключ (без ключа вы не расшифруете).

Как уже отмечалось, ключ должен иметь длину 128, 192 или 256 бит (= 16, 24 или 32 байта).Если он должен быть сгенерирован из другой строки, вам нужно знать, как.

String decryptedValue = new String (decValue);String decoded = new String (Base64.decode (decryptedValue, Base64.DEFAULT));

Вы уверены, что расшифрованное значение является кодировкой base64 другой строки?

Просто чтобы получить примеры крипто-Java, вы можете получить лут в моем блоге .

...