@Dark19

Как дешифровать текст с помощью AES в режиме CBC?

Добрый день, стоит такое задание: нужно реализовать криптосистему, которая использует AES в режиме CBC. 16-байтный начальный вектор IV избирается случайно и приписывается спереди шифротекста. Для режима CBC использовать схему PKCS5 для дополнения сообщения, чтобы его длина стала кратной длине блока. Ниже приведены ключ и зашифрованное сообщение в шестнадцатеричном виде. Задача заключается в дешифровке сообщения.
Собственно данные:
1) ключ - 140b41b22a29beb4061bda66b6747e14
2) шифротекст - 4ca00ff4c898d61e1edbf1800618fb2828a226d160dad07883d04e008a7897ee\
2e4b7465d5290d0c0e6c6822236e1daafb94ffe0c5da05d9476be028ad7c1d81

Я в этом вообще не шарю, но лабу нужно сделать. Вот поискав на просторах интернета решения, я нашел кое что на PHP и немного привел к нужному виду для этой задачи, но вот не знаю, что дальше нужно делать чтобы дешифровать текст?
Вот код:
<?php
$Pass = "140b41b22a29beb4061bda66b6747e14";
$Clear = "4ca00ff4c898d61e1edbf1800618fb2828a226d160dad07883d04e008a7897ee\2e4b7465d5290d0c0e6c6822236e1daafb94ffe0c5da05d9476be028ad7c1d81";
$newClear = fnDecrypt($Clear, $Pass);
echo "Decrypred: ".$newClear."";
function fnDecrypt($sValue, $sSecretKey)
{
return rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, $sSecretKey, base64_decode($sValue), MCRYPT_MODE_CBC, mcrypt_create_iv( mcrypt_get_iv_size( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC ), MCRYPT_RAND )), "\0");
}
  • Вопрос задан
  • 792 просмотра
Решения вопроса 1
@krypt3r
Что-то вот такое вам нужно:
<?php
function pkcs5_pad ($text)
{
    $size = mcrypt_get_block_size (MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $pad = $size - (strlen($text) % $size);
    return $text . str_repeat(chr($pad), $pad);
}

function pkcs5_unpad ($text)
{
    $pad = ord ($text{strlen ($text) - 1});
    if ($pad > strlen ($text))
        return false;
    if (strspn($text, $text{strlen($text) - 1}, strlen($text) - $pad) != $pad) {
        return false;
    }
    return substr($text, 0, -1 * $pad);
}

$key = '140b41b22a29beb4061bda66b6747e14';
$enc = '4ca00ff4c898d61e1edbf1800618fb2828a226d160dad07883d04e008a7897ee2e4b7465d5290d0c0e6c6822236e1daafb94ffe0c5da05d9476be028ad7c1d81';
$iv = substr ($enc, 0, 32);
$enc = substr ($enc, 32);
$iv = hex2bin ($iv);
$enc = hex2bin ($enc);
$key = hex2bin ($key);

$dec = mcrypt_decrypt (MCRYPT_RIJNDAEL_128, $key, $enc, MCRYPT_MODE_CBC, $iv);
$dec = pkcs5_unpad ($dec);
echo "$dec\n"; /* Basic CBC mode encryption needs padding. */
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@m0rd
Вы не правильно написали код, написано же в задаче
16-байтный начальный вектор IV избирается случайно и приписывается спереди шифротекста

Его надо брать из начала, а вы его генерите. Ну base64_decode скорее всего лишнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы