Я пытаюсь сделать процедуру шифрования/дешифрования с помощью mcrypt
, но, похоже, он пытается испортить данные, пытающиеся зашифровать.mcrypt messing с данными
Heres код:
$data = 'Some important data';
$key = "mycryptKey";
$cipher = "rijndael-128";
$encryptedData = mcrypt_encrypt($cipher, $key, $data, MCRYPT_MODE_ECB);
$decryptedData = mcrypt_decrypt($cipher, $key, $encryptedData, MCRYPT_MODE_ECB);
var_dump($data); //string 'Some important data' (length=19)
var_dump($encryptedData); //string '™ì{*¾xv-&n5’Œü½Ýëc®n)mSƒ7]' (length=32)
var_dump($decryptedData); //string 'Some important data�������������' (length=32)
Он продолжает добавлять эти символы в конце исходной строки. Я видел пример на How do you Encrypt and Decrypt a PHP String?, но он не работал
Это настоящий тест. Ключ и данные я использую тот же размещено здесь
Редактировать
я понял, после того, как @jonhopkins комментария, что Mcrypt был обивкой некоторые «\ 0» символов после $ данных контента, поэтому я очищаю его после дешифрования с помощью «strtok»:
$decryptedData = \strtok(mcrypt_decrypt($cipher, $key, $encryptedData, MCRYPT_MODE_ECB), "\0");
var_dump($decryptedData); //string 'Some important data' (length=19)
Если бы мне пришлось угадать, я бы предположил, что метод шифрования автоматически заполняет строку. IIRC rijndael-128 требует, чтобы его ввод был длинным, равным 16, поэтому 'mcrypt_encrypt' заполняется 0s до 32 байтов, но я полагаю, что' mcrypt_decrypt' не может определить исходную длину, поэтому он оставляет эти дополнительные байт. – jonhopkins
Вы гений @jonhopkins! Но есть еще один вопрос: как я мог возвращать одни и те же данные, если мне нужно его модифицировать, прежде чем перейти к mcrypt? – CarlosCarucce
Это большой вопрос, который, как мне бы хотелось, я знал ответ ... Я даже не уверен, что это то, что происходит. Но если я найду что-нибудь, то я дам вам знать. edit: http://stackoverflow.com/q/20507050 это может помочь – jonhopkins