Тройное DES-шифрование строки до 8-байтового гекса

Я должен зашифровать строку в 8-байтовый гекс, используя TDES. Ниже приведены значения (изменены для справки)

key = 636948778095358323114731
pin=1234

Код для шифрования:

function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}

function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

Однако, когда я делаю это:

//outputs 3des encrypted data
echo encryptText_3des($data, $encryption_key);

Я получаю эту ошибку:

   Warning: mcrypt_encrypt(): Encryption mode requires an initialization
vector of size 8

Как я могу получить значение? .. (пожалуйста, мне также нужно это как 8-байтовый шестнадцатеричный ..)
Спасибо

1

Решение

Вы пропустите вектор инициализации для функции шифрования:

function encryptText_3des($plainText, $key)
{
$key = hash("md5", $key, TRUE);
for ($x = 0; $x < 8; $x++) {
$key = $key . substr($key, $x, 1);
}
$padded = pkcs5_pad($plainText,mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));

// CBC initialization vector
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC, $iv));

return $encrypted;
}

Также не забудьте сохранить $iv где-то строка (например, включенная в зашифрованную строку), потому что байты IV требуются для процедуры дешифрования TDES позже.

Смотрите также

1

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

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

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