Как расшифровать блоб MySql из файла резервной копии?

0

Я получил файл резервной копии MySql, содержащий столбец типа:

CREATE TABLE 'person' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'profilepicture' blob,
)

Содержимое этой строки profilepicture закодировано в файле резервной копии на какой-то дамп, начиная (в текстовом редакторе), например:

INSERT INTO 'tbox_account_transaction' VALUES (8,'?\?\?0JFIF\0\0\0\0\0\0[...]');                  

Как я могу декодировать это из файла резервной копии.sql в С#? Это не Base64, но я не понимаю, что еще может быть. Я не хочу восстанавливать файл backup.sql на MySql, а вместо этого расшифровывать blob из файла резервной копии.

  • 0
    Так что же произойдет, если вы переименуете файл в something.jpg .jpg, он откроется?
  • 0
    Ты уверен, что это закодировано Сэмом? Данные BLOB-объектов обычно выглядят так (например, если база данных работала, и вы сделали SELECT profilepicture FROM person она SELECT profilepicture FROM person что-то подобное). Если он не закодирован, вы можете просто преобразовать значение непосредственно в файл - см. Здесь: stackoverflow.com/questions/8592455/…
Показать ещё 1 комментарий
Теги:

2 ответа

1

Байты, которые вы видите, почти наверняка являются начальными байтами изображения JPEG. Читаемая строка "JFIF", начиная с пятого байта, является ключом (см. Https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format).

Многие из других двоичных байтов являются нулевыми или непечатаемыми символами. Все странно \? или \0 - это лучшие усилия клиента при представлении этих байтов на вашем текстовом дисплее.

Самый простой способ получить доступ к этим данным - это восстановить файл дампа в экземпляр MySQL (даже локальный, работающий на ноутбуке), а затем использовать SQL в вашем коде С# для доступа к двоичному содержимому profilepicture.

Или сохраните данные из одного блоба в файл .jpg как предлагает @Tommaso Belluzzo, или просто покажите его напрямую, если сможете. Я не программист на С#, но для этого есть класс Bitmap (см. Https://msdn.microsoft.com/en-us/library/8tda2c3c(v=vs.85).aspx).

Он выходит за рамки ответа на переполнение стека, чтобы дать учебник о том, как писать SQL в приложении С#. Для этого доступно множество ресурсов.

  • 0
    У меня нет MySql Server, где мне нужно прочитать этот файл, поэтому я как-то хочу декодировать информацию из файла backup.sql - мне просто нужна информация о том, как она кодируется в файле backup.sql. Например, ' закодировано как \' ... Я знаю, как создать файл из потока и как создать класс растрового изображения, но мне нужно сначала декодировать информацию.
  • 0
    Я предполагаю, что это вообще не кодируется, это просто двоичные байты, встроенные в файл резервной копии среди читаемых человеком байтов. Таким образом, вы сможете обрезать файл до и после данных BLOB-объектов, и это будет JPEG.
Показать ещё 2 комментария
0

Это похоже на заголовок файла jpg. Попробуйте следующее (blob является String напечатал переменная, содержащая profilepicture):

using (MemoryStream stream = new MemoryStream(buffer))
{
    Image image = Image.FromStream(stream, true, true);
    image.Save("C:\\Test.jpg", ImageFormat.Jpeg);
}
  • 1
    FWIW, я не понизил - я проголосовал за этот ответ, потому что вы, вероятно, правы, что данные большого двоичного объекта являются двоичными байтами изображения JPEG. Но я бы прокомментировал, что в этом примере кода не хватает шагов, которые понадобятся оператору для получения данных из файла дампа SQL в ваш buffer .
  • 0
    Я отредактировал свой вопрос для уточнения: база данных не работает, я получил только файл резервной копии и хочу декодировать большой двоичный объект из файла backup.sql

Ещё вопросы

Сообщество Overcoder
Наверх
Меню