mcrypt_decrypt
дает мне дополнительные невидимые символы, которые НЕ ВИДИМО, просто эхом на странице. ЕСТЬ ТОЛЬКО ВИДЕТЬ, записывая его в текстовый файл. Значит, просто отображение на странице в порядке и трудно заметить.
Вот пример кода от Google. Пожалуйста, расскажите мне, какое правильное использование – что-то не так :
function encrypt ($pure_string, $key) { $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $encrypted_string = mcrypt_encrypt(MCRYPT_BLOWFISH, $encryption_key, $pure_string, MCRYPT_MODE_ECB, $iv); return $encrypted_string; } function decrypt ($encrypted_string, $key) { $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $decrypted_string = mcrypt_decrypt(MCRYPT_BLOWFISH, $encryption_key, $encrypted_string, MCRYPT_MODE_ECB, $iv); return $decrypted_string; }
но когда я попробую:
$encrypted_string = encrypt("This is the original string.", "ABC123"); echo decrypt($encrypted_string, "ABC123");
.. Я получаю что-то вроде:
This is the original string.
Эти странные символы
на самом деле не видны, когда вы / я просто echo
это. Его можно увидеть только в текстовом файле.
Спасибо.
rtrim () удалит дополнение, добавленное mcrypt …
Вы можете использовать trim($string, "\0\4")
для вырезания этих символов.
Это дополнение. Режим ECB требует, чтобы вход был кратным размеру блока шифрования, поэтому добавляются дополнительные байты (скорее всего, это дополнение PKCS # 5).
Чтобы удалить дополнение PKCS # 5, вы можете использовать следующий код:
$dec_s = strlen($decrypted); $padding = ord($decrypted[$dec_s-1]); $decrypted = substr($decrypted, 0, -$padding);
функция шифрования ($ pure_string, $ key ) {
=> $ key
$ encrypted_string = mcrypt_encrypt (MCRYPT_BLOWFISH, $ encryption_key , $ pure_string, MCRYPT_MODE_ECB, $ iv);
=> $ encryption_key
не равный