AES 256 с закодированными данными PKCS7 имеет половину блока ECB и половину блока CBC

Я пытаюсь декодировать данные в php, возвращенном с сервера: я знаю, что данные AES 256 декодированы и имеют заполнение PKCS7, но не могу понять, какой режим блока он использует

вот моя функция PHP:

public function decode($data)
{
//AES decode
$iv = mcrypt_create_iv(GEServerConnection::FBENCRYPT_BLOCK_SIZE, MCRYPT_RAND);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->cryptKey, base64_decode($data), MCRYPT_MODE_ECB, $iv);

//return $data;
$len = strlen($data);
$pad = ord($data[$len - 1]);

return substr($data, 0, - $pad);
}

и пример закодированных данных

3KD+zb/2u5gGEWvOy0Q0nSQE9pbQZmg27iN6WLiO/Af9YjN8MhHOb8TMa5uETaab

когда я декодирую с помощью ECB (MCRYPT_MODE_ECB), он декодирует только начало данных, а остаток не читается

"Please input yo��޸̓��g|��*P�Te���  R�B

и при декодировании в режиме CBC (MCRYPT_MODE_CBC) он становится нечитаемым

��0�=v������.3ur username and password again"

результат должен быть (что я получаю на Mac, используя CommonCryptor в target-c):

"Please input your username and password again"

кто-нибудь знает, что не так или как правильно его расшифровать?

4

Решение

Пожалуйста, посмотрите на Статья в википедии. Посмотрите, как ECB и CBC выполняет расшифровку. Если бы использовался режим ECB, вы бы правильно расшифровали весь текст. Кажется, что шифр использовал CBC, потому что он использует предыдущий текст шифра + текущий текст шифра + функцию дешифрования, чтобы получить оригинальный текст. Это причина, почему вы правильно декодировали второй блок.

Теперь, почему первый блок декодирован неправильно? Это потому, что вам нужно указать правильный вектор инициализации. Это должно быть то же самое, что использовалось для шифрования. Нам повезло, что мы знаем, что ECB декодировал первый блок, потому что ECB не использует вектор инициализации.

Ответ прост: используйте CBC с нулевым вектором инициализации (все байты равны нулю), потому что теперь ваш случайный IV изменил первый блок на неправильный вывод.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector