![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Кто-нибудь разбирается в шифровании aes? Мне необходимо написать криптор, но работа этого алгоритма мне не понятна.
|
|
#2
|
||||
|
||||
|
Тебе это точно поможет...досмотри до конца и все поймешь...
http://www.pgpru.com/biblioteka/statji/aesvkartinkah |
|
#3
|
|||
|
|||
|
Очень забавно) Огромное спс.
|
|
#4
|
||||
|
||||
|
Что именно не понятно?
|
|
#5
|
|||
|
|||
|
1. Если мне необходимо зашифровать текст, то ведь текст надо поместить в массив 4х4. А если текст очень большой? неужели в 128 байтный массив поместится какой угодно текст? Или таких массивов можно создать несколько?
2. В этом массиве данные хранятся в виде {xy}, что это за вид? 3. Что такое байты состояния? |
|
#6
|
||||
|
||||
|
Цитата:
Самый простой ЕСВ = электронная кодовая книга, когда текст делится на блоки по 16 байт и каждый блок шифруется отдельно. 1...16,17..32,33..48 и т.д. соответственно. 2. Шестнадцатеричная система счисления. 00=0,...,FF=255. 3. Там применяется таблица состояния 4х4= 16 байт = 128 бит, фактически это результат шифрования на каждом раунде. После 10-го раунда - результат шифрования.(при ключе 128 бит). Последний раз редактировалось Konrad, 21.01.2010 в 19:43. |
|
#7
|
|||
|
|||
|
А где можно по подробней узнать про ECB?
|
|
#8
|
||||
|
||||
|
Цитата:
Набери "ECB шифрование". |
|
#9
|
|||
|
|||
|
С ECB вроде разобрался. А как, переменную типа string присвоить переменной типа char? В массиве ведь хранятся коды букв ASCII?
Последний раз редактировалось km_, 22.01.2010 в 18:17. |
|
#10
|
||||
|
||||
|
Цитата:
Код:
var c:char; s:string; begin s:='efwergreh'; c:=s[3]; end; |
|
#11
|
|||
|
|||
|
А, понятно. Теперь по порядку. Первое что нужно было сделать, разбить текст на элементы и вставить по элементу в каждую ячейку таблицы. Потом эти элементы (буквы) перевести по их коду ASHII в шестнадцатеричные. Потом получить из массива строку вида 1...16,17..32,33..48 и т.д. И эту строку зашифровать по какой-нибудь функции. Я правильно понял? Это и есть ECB?
Последний раз редактировалось km_, 22.01.2010 в 18:33. |
|
#12
|
||||
|
||||
|
Цитата:
Блочный шифр шифрует блоками, определенной длины. В АЕS длина блока равна 128 бит=16 байт. Разбиваешь текст на части, длина каждой части - 16 байт. И шифруешь каждую часть отдельно. Это и будет ECB. Например, Текст: [Самый простой ЕС] [В = электронная ][кодовая книга, к][огда текст делит][ся на блоки по 1][6 байт и каждый ][блок шифруется о][тдельно.00000000]. Где в [] - блок 16 байт. |
|
#13
|
|||
|
|||
|
А если у нас не набирается 16 байт, как забить пустоты нулями?
|
|
#14
|
||||
|
||||
|
Цитата:
Одни специалисты рекомендуют нули, другие - случайные данные.(мотивируя это тем, что нападающий не будет знать эти данные). Последний байт - длина добавки. |
|
#15
|
|||
|
|||
|
Практически сделал ECB.
Вот код: Код:
procedure TForm1.Button1Click(Sender: TObject);
var str, str1,s, block:string; i, j, t, kol, a, b:integer;
input:array[1..100] of string; state:array[1..100, 1..100] of string;
begin
str:=edit1.text;
kol:=length(str);
t:=0; j:=0; a:=0; b:=1;
while kol>0 do
begin
kol:=kol-16;
t:=t+1;
end;
for i:=1 to t do
begin
str1:=copy(str, 1, 16);
delete(str, 1, 16);
while str1<>'' do
begin
j:=j+1;
s:=copy(str1, 1, 1);
delete(str1, 1, 1);
input[j]:=s;
end;
for j:=1 to 16 do
begin
if input[j]='' then input[j]:='0';
block:=block+input[j];
end;
for j:=1 to 16 do
begin
a:=a+1;
state[a, b]:=input[j];
if a=4 then
begin
a:=0;
b:=b+1;
end;
end;
block:='';
for a:=1 to 4 do
for b:=1 to 4 do
block:=block+state[a,b];
memo1.Lines.Add(block);
j:=0;
end;
end;Последний раз редактировалось km_, 25.01.2010 в 16:15. |