трансформатор aont
Jul. 21st, 2012 05:56 pmНаписал небольшую программку для разделения секретного файла на несколько частей. Лежит на http://nsg.upor.net/sys/win/aont.htm , описание (на английском) -- там же. Основана на преобразовании типа "или-всё-или-ничего". (Преобразование не содержит секретной информации, типа пароля, и может быть легко обращено, но только при условии что доступны все байты. Если хотя бы часть преобразованного файла отсутствует или повреждена, то оставшаяся часть не может быть восстановлена даже частично.)
Собстванно, саму программку для преобразования одного файла в один файл я написал давно и быстро -- криптографические классы от .net делают эту задачу почти тривиальной. Трудность, довольно неожиданно, оказалась в том что мне нужно было не просто преобразование, а разделение результата на несколько (возможно неравных) файлов, и последующее их слияние при восстановлении.
Изначально я думал использовать для этого отдельную уже существующую утилиту (cut) с последущей склейкой частей с помощью "copy /b a+b+c d". Но это оказалось не совсем то. Во-первых, cut не умеет делить на несколько неравных частей. Я даже было написал свою утилиту (usplit, unequal split) как раз для этого. Но тут-то и выяснилось, что, во-вторых, использование двух команд для одной операции очень раздражает. Так мне пришлось вставлять операции разделения результата на части и склейки их при обратном преобразовании непосредственно в aont.
Как именно указывать размеры и количество частей? Как генерировать для них имена, если пользователь не указал их явно? Как указывать какие файлы и в каком порядке нужны для обратного преобразоывания? Какое имя использовать для восстановленного результата если не указано явно? Как отличить ситуацию когда указано несколько файлов и непонятно, то ли последнее имя -- это имя одной из частей, то ли имя результата.
При этом всё это должно быть "интуитивно", хотя бы для меня самого.
В общем, неинтеллектуальная часть занимает большую половину, всё как обычно.
Собстванно, саму программку для преобразования одного файла в один файл я написал давно и быстро -- криптографические классы от .net делают эту задачу почти тривиальной. Трудность, довольно неожиданно, оказалась в том что мне нужно было не просто преобразование, а разделение результата на несколько (возможно неравных) файлов, и последующее их слияние при восстановлении.
Изначально я думал использовать для этого отдельную уже существующую утилиту (cut) с последущей склейкой частей с помощью "copy /b a+b+c d". Но это оказалось не совсем то. Во-первых, cut не умеет делить на несколько неравных частей. Я даже было написал свою утилиту (usplit, unequal split) как раз для этого. Но тут-то и выяснилось, что, во-вторых, использование двух команд для одной операции очень раздражает. Так мне пришлось вставлять операции разделения результата на части и склейки их при обратном преобразовании непосредственно в aont.
Как именно указывать размеры и количество частей? Как генерировать для них имена, если пользователь не указал их явно? Как указывать какие файлы и в каком порядке нужны для обратного преобразоывания? Какое имя использовать для восстановленного результата если не указано явно? Как отличить ситуацию когда указано несколько файлов и непонятно, то ли последнее имя -- это имя одной из частей, то ли имя результата.
При этом всё это должно быть "интуитивно", хотя бы для меня самого.
В общем, неинтеллектуальная часть занимает большую половину, всё как обычно.