mcrypt'ом в файле хранить

Dzen

Новичок
Приветствую,

А можно ли как-то извратиться, чтобы данные, которые каждый раз шифруются мкриптом, хранились именно в одном файле?
И доставались из него по принципу обращения к нему, как к массиву?

ну например, при создании нового пароля, он криптуется и записывается в file.txt,
следующий пароль криптуется и записывается на след.строку в этот же файл.

а при раскриптовки, открываем этот файл как $file = file ("file.txt");
и обращаемся к нужной строке через номера элементов $file[0], $file[1] и т.д.
С обычном текстом, так конечно проходит, но с мкриптом...

вроде так не работает, точнее считывает верно только 1-ую строку, а при обращении ко второму элементу получаем мусор, хоть с trim'ом хоть без.

И кажется проблема в том, что мкрипт иногда записывает зашифрованные данные в одну строку, а иногда зачем-то перенос делает на след. строку в файле, и тогда считывание через массив конечно не пройдёт, т.к. будет не полная строка.
 

MiksIr

miksir@home:~$
И кажется проблема в том, что мкрипт иногда записывает зашифрованные данные в одну строку, а иногда зачем-то перенос делает на след. строку в файле
base64_encode поможет перед записью, ну и base64_decode после чтения
 
  • Like
Реакции: Dzen

AnrDaemon

Продвинутый новичок
Это потому что ты неправильно читаешь.
Не надо закладываться на нечёткую функциональность, а у file() она как раз нечёткая. EOL определяется эвристикой.
Пиши
PHP:
fwrite($file, pack('V', strlen($buf)) . $buf);
и читай так же.
 
  • Like
Реакции: Dzen

fixxxer

К.О.
Партнер клуба
Так ему надо несколько паролей, а не один.
Так что надо хранить длину в первом байте/слове, потом захочется сделать отдельный файлик со смещениями, чтобы целиком все не читать, потом захочется повторно использовать дырки от удаленных... В итоге напишешь свой sqlite :)
 

AnrDaemon

Продвинутый новичок
Я хотел предложить sqlite, но как-то… не думал, что товарищу нужно что-то большее, чем пара строк.
 
Сверху