PHP MCRYPT encrypt / decrypt возвращает невидимые странные символы?

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

не равный