Я хочу сохранить строку base64_encoded как двоичные данные. Поэтому используйте base64_decode () в строке перед вставкой в поле LONGBLOB в MySQL. Пока все хорошо, однако, когда я извлекаю данные из MySQL, я не могу сгенерировать правильную строку base64_encoded, которую я начал с …
Как это возможно? заранее спасибо
РЕДАКТИРОВАТЬ
Сохраненные данные представляют собой зашифрованную строку с помощью процедуры шифрования AES-256CBC OPENSSL.
КОД
Для моего кода я использую OpenSSL для шифрования строки
$string = "Test"; $IV = "1234567890123456"; $key = "12345678901234561234567890123456"; $encrypted = openssl_encrypt($string, "AES-256-CBC", $key, false, $IV); $encrypted string is stored in LONGBLOB field by $sql_insert_data = $mysqli->prepare("INSERT INTO `TBLName` (String) Values(?)"); $sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted)); //Thereafter, it is retrieved by a select statement $decrypted = openssl_decrypt($row['String'], "AES-256-CBC", $key, true, $IV);
Когда я делаю base64_encode в строке и сохраняю это как значение TEXT в БД, это работает. Однако, когда я этого не делаю, вышесказанное не работает …
благодаря
Вы неправильно используете подготовленные инструкции:
$sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted)); ^^^^^^^^^^^^^^^^^^ :-!
Ваш код добавит случайную обратную косую черту в двоичный поток. Вам вообще не нужен real_escape_string()
.
«Проклятый сын, вопрос в том, как я успешно оптимизирую хранение данных base64_encoded в mysql. Вот и все». – См. https://stackoverflow.com/a/42080296/1766831