Я пишу шифрование для своего приложения и веб-сайта, но я не знаю, как правильно шифровать строку в php. Расшифровка уже выполняется с помощью этого кода:
function decrypt_blowfish($data,$key){ $iv=pack("H*" , substr($data,0,16)); $key=pack("H*" , $key); $x =pack("H*" , substr($data,16)); $res = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $x , MCRYPT_MODE_CBC, $iv); return $res; }
Я пробовал с простым:
function encrypt_blowfish($data,$key){ $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv); return $crypttext; }
Но он возвращает strang ASCI вместо правильного кода blowfish. Может ли кто-нибудь объяснить мне, почему, и что я делаю неправильно? заранее спасибо
СН
function decrypt_blowfish($data,$key){ $iv=pack("H*" , substr($data,0,16)); $x =pack("H*" , substr($data,16)); $res = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $x , MCRYPT_MODE_CBC, $iv); return $res; } function encrypt_blowfish($data,$key){ $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv); return bin2hex($iv . $crypttext); } $string = encrypt_blowfish('hello world', 'abc123'); echo 'ENCRYPTED: ' . $string . "\n"; echo 'DECRYPTED: ' . decrypt_blowfish($string, 'abc123');
Попробуй это. В функции дешифрования вы конвертируете из шестнадцатеричного в двоичный, поэтому он ожидает передачи шестнадцатеричного значения. Ваша функция шифрования выводит двоичный код, поэтому вам нужно преобразовать его в hex с указанным выше изменением.