PHP-скрипт для DES / CBC / с PKCS5Padding для шифрования и дешифрования

Я хотел бы узнать в следующем коде, если добавление PKCS # 5 добавлено? Если нет, то как добавить?

$message = "insert plaintext message here"; $iv = pack('H*', 'insert hex iv here'); $key = pack('H*', 'insert hex key here'); $enc = mcrypt_encrypt(MCRYPT_DES, $key, $message, MCRYPT_MODE_CBC, $iv); echo bin2hex($enc); 

Я также хочу создать PHP-код для расшифровки строки, созданной с помощью DES / CBC / PKCS5Padding. Я думаю, что вышеупомянутый код можно изменить, чтобы получить расшифровку.

Для меня важнее получить сценарий PKCS # 5 Padding and Unpadding.

Solutions Collecting From Web of "PHP-скрипт для DES / CBC / с PKCS5Padding для шифрования и дешифрования"

Нет, он не добавлен. К сожалению, PHP / mcrypt использует нулевое заполнение, пока сообщение не будет в N раз больше размера блока.

Чтобы добавить дополнение PKCS # 5, используйте формулу:

 p = b - l % b 

Где l – длина сообщения, b – размер блока, а % – операция останова. Затем добавьте p байтов со значением p до конца перед выполнением шифрования.

Я нашел несколько скриптов и изменил их ниже, проверьте, выполнено ли PKCS # 5 Padding.

 <?php function printStringToHex($text) { $size = strlen($text); for($i = 0; $i < $size; $i++) { echo dechex(ord($text[$i])) . " "; } } function encrypt($input) { echo "<PRE>*** Encrypt *** </PRE>"; echo "<PRE>Raw input: " . $input . "</PRE>"; $size = mcrypt_get_block_size('des', 'cbc'); echo "<PRE>Block: " . $size . "</PRE>"; $input = pkcs5_pad($input, $size); echo "<PRE>PKCS#5 padding: "; echo printStringToHex($input); echo "</PRE>"; $td = mcrypt_module_open('des', '', 'cbc', ''); $iv = pack('H*','insert hex iv here'); $key = pack('H*','insert hex key here'); mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); echo "<PRE>Raw output: " . $data . "</PRE>"; echo "<PRE>Hex output: "; echo printStringToHex($data); echo "</PRE>"; mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data); echo "<PRE>B64 output: " . $data . "</PRE>"; echo "<PRE>B64 output len: "; echo strlen($data) . "</PRE>"; return $data; } function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } $enc = encrypt("insert plaintext message here");