Обратимое шифрование имен файлов, чтобы результат был действительным - PullRequest
1 голос
/ 22 августа 2011

Как мне обратимо (симметрично) зашифровать имя файла (с помощью или без пути к каталогу, я в порядке, либо с), так что результат также допустимое имя файла (менее 64 символов [или любое другое ограничение], нет забавные персонажи, в идеале без пробелов [но не обязательно] и т. д.)?

Поиск в Google находит только алгоритмы шифрования имени файла, где результат длинная строка двоичных символов (с использованием MIME64, преобразование в не бинарный это легко, но это только увеличивает имя файла) и / или несимметричные односторонние схемы шифрования (например, соленые MD5, SHA1, DES, так далее). Я не хочу хранить таблицу хешей: я хочу расшифровать имя файла с простым ключом, который я запомнил.

Мои собственные попытки с такими вещами, как "mcrypt -b", тоже не увенчались успехом: выход (даже до преобразования в ASCII) очень быстро увеличивается в размере увеличение имени файла и длины ключа.

Обоснование: я планирую использовать службу «бесконечного резервного копирования» (например, mozy, Blazebackup и т. д.), но ни одно из них не шифрует имена файлов (только файл содержание). Я создам каталог, который состоит из зашифрованных имен файлов с символическими ссылками (или даже жесткими ссылками) на реальный файл. Я только резервную копию этот каталог (и выбрать мой собственный закрытый ключ), и иметь резервные копии, зашифрованные с именами файлов и с содержимым файлов.

РЕДАКТИРОВАТЬ: метод Пити работал как шарм!

# "-b 512" yields "Bits has bad value 512 (too small)" 
ssh-keygen -t rsa -b 768 -f /tmp/test.rsa 
echo "thisisareallylongfilenameknightswhosayniioratleastusedto" |\ 
 openssl rsautl -inkey /tmp/test.rsa -encrypt | base64 |\ 
 perl -0777 -pnle 's/\//-/isg;s/\n//isg' 

возвращает результат в 130 символов, который всегда должен быть именем файла!

Ответы [ 3 ]

1 голос
/ 22 августа 2011

Насколько сильным должно быть ваше шифрование?Вы можете использовать один из классических алфавитных шифров, таких как Vigenère , который будет производить строго алфавитный вывод, хотя он не будет хорошо обрабатывать не алфавитно-цифровые символы, если вы хотите использовать правильное имя файла в качестве вывода.Результат все равно будет иметь «/» и «.»где они были раньше.

1 голос
/ 22 августа 2011

Вы можете использовать пару ключей RSA для этого. Создайте пару ключей rsa и сертификат, затем импортируйте его в свой сертификатный магазин. Используйте открытый ключ, чтобы зашифровать имя вашего файла, затем base64 закодировать результат. Максимальная длина имени файла для ntfs составляет 255 символов, поэтому 1024-битный ключ RSA должен подойти, если вам нужны более короткие имена файлов, используйте 512-битный ключ. Если вы хотите расшифровать имя файла: base64 расшифрует зашифрованное имя файла, затем используйте закрытый ключ для дешифрования обратно к реальному имени файла.

Не уверен, есть ли какие-либо бесплатные программы для этого. Если вы не хотите писать программу самостоятельно, я сделаю это в .Net для вас (за небольшую плату;).

0 голосов
/ 22 августа 2011

Если вы очень обеспокоены безопасностью, стоит отметить, что имена файлов с высокой энтропией могут получить больше внимания, чем просто «file000001», ... «fileNNNNNNN».Отдельный файл, который отображается из fileNNNN на правильное имя, может быть зашифрован отдельно и сохранен в двух экземплярах в нескольких местах.Оба метода пропускают ноль информации об исходных именах файлов.В качестве альтернативы, вы можете добавить короткий заголовок к каждому незашифрованному файлу, который шифрует имя файла, тем самым обходясь без отдельного индекса.

Более того, возможность обнаружения поврежденных имен файлов проще, когда список именкак в известном, так и в заранее определенном порядке.

[Публикация как CW, потому что это действительно больше комментарий, чем ответ.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...