Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.01.2010, 22:15
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию Шифрование алгоритмом AES

Кто-нибудь разбирается в шифровании aes? Мне необходимо написать криптор, но работа этого алгоритма мне не понятна.
Ответить с цитированием
  #2  
Старый 20.01.2010, 22:20
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Тебе это точно поможет...досмотри до конца и все поймешь...
http://www.pgpru.com/biblioteka/statji/aesvkartinkah
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 20.01.2010, 22:36
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

Очень забавно) Огромное спс.
Ответить с цитированием
  #4  
Старый 20.01.2010, 23:15
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Что именно не понятно?
Ответить с цитированием
  #5  
Старый 21.01.2010, 19:15
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

1. Если мне необходимо зашифровать текст, то ведь текст надо поместить в массив 4х4. А если текст очень большой? неужели в 128 байтный массив поместится какой угодно текст? Или таких массивов можно создать несколько?
2. В этом массиве данные хранятся в виде {xy}, что это за вид?
3. Что такое байты состояния?
Ответить с цитированием
  #6  
Старый 21.01.2010, 19:24
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от km_
1. Если мне необходимо зашифровать текст, то ведь текст надо поместить в массив 4х4. А если текст очень большой? неужели в 128 байтный массив поместится какой угодно текст? Или таких массивов можно создать несколько?
2. В этом массиве данные хранятся в виде {xy}, что это за вид?
3. Что такое байты состояния?
1. Есть режимы шифрования, СВС,ОFB и т.д.
Самый простой ЕСВ = электронная кодовая книга, когда текст делится на блоки по 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  
Старый 21.01.2010, 22:05
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

А где можно по подробней узнать про ECB?
Ответить с цитированием
  #8  
Старый 22.01.2010, 00:12
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от km_
А где можно по подробней узнать про ECB?
В гугле.
Набери "ECB шифрование".
Ответить с цитированием
  #9  
Старый 22.01.2010, 17:55
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

С ECB вроде разобрался. А как, переменную типа string присвоить переменной типа char? В массиве ведь хранятся коды букв ASCII?

Последний раз редактировалось km_, 22.01.2010 в 18:17.
Ответить с цитированием
  #10  
Старый 22.01.2010, 18:03
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от km_
С ECB вроде разобрался. А как, переменную типа string присвоить переменной типа char.
зачем?

Код:
var
c:char;
s:string;
begin
s:='efwergreh';
c:=s[3];
end;
"c" будет равно букве "w";
Ответить с цитированием
  #11  
Старый 22.01.2010, 18:30
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

А, понятно. Теперь по порядку. Первое что нужно было сделать, разбить текст на элементы и вставить по элементу в каждую ячейку таблицы. Потом эти элементы (буквы) перевести по их коду ASHII в шестнадцатеричные. Потом получить из массива строку вида 1...16,17..32,33..48 и т.д. И эту строку зашифровать по какой-нибудь функции. Я правильно понял? Это и есть ECB?

Последний раз редактировалось km_, 22.01.2010 в 18:33.
Ответить с цитированием
  #12  
Старый 23.01.2010, 17:17
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от km_
Первое что нужно было сделать, разбить текст на элементы и вставить по элементу в каждую ячейку таблицы. Потом эти элементы (буквы) перевести по их коду ASHII в шестнадцатеричные. Потом получить из массива строку вида 1...16,17..32,33..48 и т.д. И эту строку зашифровать по какой-нибудь функции. Я правильно понял? Это и есть ECB?
Переводить в НЕХ не нужно, комп и так хранит буквы в байтах.
Блочный шифр шифрует блоками, определенной длины. В АЕS длина блока равна 128 бит=16 байт.

Разбиваешь текст на части, длина каждой части - 16 байт.
И шифруешь каждую часть отдельно.
Это и будет ECB.

Например,
Текст: [Самый простой ЕС] [В = электронная ][кодовая книга, к][огда текст делит][ся на блоки по 1][6 байт и каждый ][блок шифруется о][тдельно.00000000]. Где в [] - блок 16 байт.
Ответить с цитированием
  #13  
Старый 24.01.2010, 01:09
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

А если у нас не набирается 16 байт, как забить пустоты нулями?
Ответить с цитированием
  #14  
Старый 24.01.2010, 11:34
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от km_
А если у нас не набирается 16 байт, как забить пустоты нулями?
О этом единого мнения нету.
Одни специалисты рекомендуют нули, другие - случайные данные.(мотивируя это тем, что нападающий не будет знать эти данные).
Последний байт - длина добавки.
Ответить с цитированием
  #15  
Старый 25.01.2010, 15:34
km_ km_ вне форума
Прохожий
 
Регистрация: 12.12.2009
Сообщения: 41
Репутация: 10
По умолчанию

Практически сделал 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;
Но одна проблема: если мы вводим строку длиной не больше 16 символов, то все шифруется нормально, а если больше 16, например 20, то на место второго блока выводится первый. Как это исправить?

Последний раз редактировалось km_, 25.01.2010 в 16:15.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter