|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
Скажу одно: жесть прога.
Код:
state:array[1..100, 1..100] of string; Код:
s:=copy(str1, 1, 1); Код:
block:=''; for a:=1 to 4 do for b:=1 to 4 do block:=block+state[a,b]; memo1.Lines.Add(block); |
#17
|
|||
|
|||
Цитата:
Цитата:
А вобще правильно первый блок шифрует? |
#18
|
||||
|
||||
Цитата:
Там же нету в программе шифра. Или может пропущена процедура? Это вся программа? Вся программа которая реализует указанное шифрование? Последний раз редактировалось Konrad, 25.01.2010 в 17:48. |
#19
|
|||
|
|||
Это вся программа ECB. Только без функции шифрования.
Допустим наши исходные данные - строка с текстом. Если я правильно понял, то строку запихиваем в массив 4х4 в таком порядке: |x1 |x5 |x9 |x13| |x2 |x6 |x10|x14| |x3 |x7 |x11|x15| |x4 |x8 |x12|x16| Дальше разбиваем этот массив в строку такого порядка: x1x5x9x13x2x6x10x14x3x7x11x15x4x8x12x16. И шифруем этот блок по какой нибудь функции. Все верно? Не знаешь где можно по подробнее почитать о aes. А то подробнее википедии ничего не нашел. |
#20
|
||||
|
||||
Цитата:
Все проще х1х2х3х4х5х6х7х8х9х10х11х12х13х14х15х16. Тоесть: Текст: 1234567890abcdef записываеться в массив 4х4: 159c 260d 37ae 48bf Потом этот масив шифруеться, после чего записываеться скажем в файл. В начальном порядке. Цитата:
В гугле набери. Описаний полно почти на каждом сайте о криптографии. Уже даже книгу написали на 160 страниц, полностью о АЕS. Последний раз редактировалось Konrad, 25.01.2010 в 18:58. |
#21
|
||||
|
||||
Кста
Код:
state:array[0..3,0..3] of byte; и используй файлы. Последний раз редактировалось Konrad, 25.01.2010 в 22:25. |
#22
|
|||
|
|||
Цитата:
Еще проблема в том, что когда state заполняется второй раз происходит ошибка: Пробую отчищать Код:
for a:=1 to 4 do for b:=1 to 4 do state[a, b]:=''; |
#23
|
||||
|
||||
Функциями SubBytes, ShiftRows и т.д.
Если ты пишешь state[a, b]:=''; значит state у тебя тип string? Я же наприсал: используй byte, и забудь о string, string нужен только когда будешь получать пасс или вводить данные с клавы, но не в шифpoвании! П.с.: ошибку выдает в той программе. текст которой ты привел? Та программа сплошная ошибка. Её все равно придеться переписывать. |
#24
|
|||
|
|||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var str, podstr, s:string; t, f, i, a, b, j:byte; state:array[1..4,1..4] of byte; begin a:=0; b:=1; str:=edit1.text; t:=length(str) mod 16; f:=length(str) div 16; if t<>0 then for i:=1 to 16*(f+1)-length(str) do //заполняем недостающие байты нулями str:=str+'0' else f:=f-1; for i:=1 to f+1 do //отделяем блоки begin podstr:=copy(str, 1, 16); delete(str, 1, 16); for j:=1 to 16 do begin s:=copy(podstr, 1, 1); //отделяем символы delete(podstr, 1, 1); a:=a+1; state[a, b]:=strtoint(s); if a=4 then begin a:=0; b:=b+1; end; end; end; end; Поменял string на byte. Но теперь после ввода текста появляется ошибка Последний раз редактировалось km_, 26.01.2010 в 16:42. |
#25
|
||||
|
||||
Уже лучше, но
вот этот бред Код:
for j:=1 to 16 do begin s:=copy(podstr, 1, 1); //отделяем символы delete(podstr, 1, 1); a:=a+1; state[a, b]:=strtoint(s); if a=4 then begin a:=0; b:=b+1; end; end; Код:
for a:=1 to 4 do for b:=1 to 4 do state[a, b]:=ord(podstr[(a-1)*4+b]); Правда код, который я привел в качестве примера, можно оптимизировать и он будет работать еще быстрее. Но для учебных целей и так сойдет. Последний раз редактировалось Konrad, 26.01.2010 в 17:20. |
#26
|
|||
|
|||
Теперь пытаюсь реализовать SubBytes.
Сложение и умножение вроде понял. Теперь же надо написать их функции? И что за таблица замен 8х256? Элементы поля GF{2^8} - x^7, x^6,..., x, 1? Они не изменяются? |
#27
|
||||
|
||||
Цитата:
Там применяеться умножение в поле Галуа: http://ru.wikipedia.org/wiki/Конечное_поле С помощью этого поля и получаем таблицу замен. Эти поля используються практически во всех функциях алгоритма. По сути использование конечного поля есть особенностью АЕS.( как и ряда других алгоритмов). Последний раз редактировалось Konrad, 26.01.2010 в 20:28. |
#28
|
|||
|
|||
Цитата:
Таблица замен это и есть s-блок? Никак ни могу понять как заполняется s-блок. |
#29
|
||||
|
||||
Там таблица, состоящая из 256 элементов.
Она заполняеться по определенному правилу с помощью операций в поле Галуа, а потом используеться при шифpoвании.Нулевой элемент там 1-н. Последний раз редактировалось Konrad, 27.01.2010 в 09:40. |
#30
|
|||
|
|||
После того, как мы заполнили state идут раундовые преобразования или сначало AddRoundKey?
В KeyExpansion используются массивы Rcon[] и w[]. Rcon[] - массив битов 32-ух разрядных слов. Т.е. Rcon[] состоит из слов представленных в двоичном виде? Rcon[] и w[] берут слова со state? Konrad, объясни пожалуйста, как можно более подробно, работу AddRounKey. Сразу скажу, что уже перечитал массу литературы=) ПС Названия массивов я взял из википедии. Последний раз редактировалось km_, 27.01.2010 в 16:04. |