|
#1
|
|||
|
|||
Шифрование файлов
Здравствуйте! Я новичок в делфи, так что не кидайтесь! На сколько я понимаю, при чтении файла в stream этот файл, в конечном счете, будет СТРОКОЙ определенной длины и определенного содержания (символы, цифры и тд.). Так вот, я хочу написать шифратор (и соответственно дешифратор) данных путем вставки через определенное кол-во символов в stream какой-либо мусор, допустим пару цифр. Вопрос - верна ли моя теория и на верном ли я пути?
|
#2
|
|||
|
|||
http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D 0%B0%D1%84%D0%B8%D1%8F
http://www.webdelphi.ru/2010/05/krip...ndy-i-synapse/ - Алгоритм MD5, Алгоритм Base64 и т.п. Почитай мжт что пригодится... Все смелые до begin... Последний раз редактировалось DrGeorg, 05.05.2013 в 04:54. |
Этот пользователь сказал Спасибо DrGeorg за это полезное сообщение: | ||
nano_bot (06.05.2013)
|
#3
|
|||
|
|||
Спасибо конечно, но первую статью я уже читал, а по поводу 2ой- мне нужно зашифровать файлы именно тем способом , который я предложил, если это конечно возможно!
|
#4
|
|||
|
|||
Я так понял вам нужен свой собственный алгоритм?
А чем-же стандартные не устраивают? Можно в несколько проходов шифровать и (или) комбинировать алгоритмы... Просто писать свой алгоритм - очень хлопотное дело... Спросите здесь кого-еще может вам помогут... P.S. Любая строка (строковые данные) в потоке (stream) отображаются как данные (бинарные), например "Hello world!" будет отображаться как: 48 65 6C 6C 6F 72 6C 64 21 (в переводе на шестнадцатеричную систему счисления) Все смелые до begin... Последний раз редактировалось DrGeorg, 05.05.2013 в 05:39. |
Этот пользователь сказал Спасибо DrGeorg за это полезное сообщение: | ||
nano_bot (06.05.2013)
|
#5
|
||||
|
||||
Берешь бумажку, карандаш и рисуешь, что хочешь в конечном итоге (блок схему или что тебе удобнее), все, дальше дело кодинга только.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Bargest (05.05.2013)
|
#6
|
||||
|
||||
Цитата:
В плане того, что это будет работать - да, будет. Только это скорее не шифровка, а обфускация (усложнение чтения). jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 05.05.2013 в 14:39. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
nano_bot (06.05.2013)
|
#7
|
|||
|
|||
Всем спасибо за ответы!
|
#8
|
||||
|
||||
Кстати, по теме, если уж делать обфускацию: в одной проге видел, как китайцы URL обфусцировали. Взяли строку http://блаблабла.cn/какой-то_адрес/рекламка.php, записали в обратном порядке (т.е. php.акмалкер/серда_от-йокак/nc.албалбалб//tth) и после каждого символа вставили два случайных. Тут действительно сразу было не понять, что за ерунда. Однако по обращениям к строке можно было быстро отловить алгоритм и, как следствие, вытащить строку.
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
|||
|
|||
Bargest, есть еще варианты как усложнить обфускацию?
|
#10
|
|||
|
|||
Да и все-таки, мне кажется, предложенный мною метод обфускации, в конечном счете можно обойти, там же всеравно определенная последовательность-то будет, которую можно выявить
|
#11
|
|||
|
|||
Bargest, а вот как вам такой способ - читаем файл, затем в рандомных местах вставляем рандомный мусор, и эти рандомы выдаем пользователю как ключ? Просчитать этот алгоритм можно, но толку-то не будет!
Последний раз редактировалось nano_bot, 08.05.2013 в 04:33. |
#12
|
||||
|
||||
Извините, что влезаю в ваш междусобойчик , но у меня вот такой обфускационный бред получился
Код:
uses Math; ... function TxtObfus(ds: string): string; function stk(ds: char): string; const m: array [0..2] of array [1..3] of integer = ((1,2,3),(3,1,2),(2,3,1)); var i: byte; begin Result:='123'; i:= Random(3); Result[m[i,1]]:= ds; Result[m[i,2]]:= chr(RandomRange(byte(ds),255)); Result[m[i,3]]:= chr(RandomRange(byte(ds),255)); end; var i: integer; begin Randomize; Result:=''; for i:=1 to Length(ds) do Result:= Result + stk(ds[i]); end; function ObfusTxt(ds: string): string; function mx(b1, b2, b3 : byte): byte; begin if b1 < b2 then Result:= b1 else Result:= b2; if Result > b3 then Result:= b3; end; var i: integer; s: string; begin Result:=''; i:=1; while i <= Length(ds) do begin Result:= Result+chr(mx(byte(ds[i]),byte(ds[i+1]),byte(ds[i+2]))); inc(i, 3); end; end; Код:
procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text:= TxtObfus(Edit1.Text); end; procedure TForm1.Button2Click(Sender: TObject); begin Edit3.Text:= ObfusTxt(Edit2.Text); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nano_bot (08.05.2013)
|