eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Шифрование AES-128
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 107.2 (ветеран)
Статус: Участник

Создано: 27 июля 2007 19:22 New!
Цитата · Личное сообщение · #1

Можете подсказать алгоритм?
На каком-нибудь языке программирования.
Желательно Delphi.
Или этот алгоритм закрыт?


Ранг: 269.3 (наставник)
Статус: Участник
Advisor

Создано: 27 июля 2007 19:26 · Поправил: Bronco New!
Цитата · Личное сообщение · #2

Magister Yoda пишет:
Или этот алгоритм закрыт?

Да фиг его знает,на
[url=http://www.torry.net/
]http://www.torry.net/
[/url]
поищи...кажется 128 был

Ранг: 309.8 (мудрец)
Статус: Участник

Создано: 27 июля 2007 19:26 · Поправил: SLV New!
Цитата · Личное сообщение · #3

пистец... www.google.ru/search?q=AES+source+code&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


Ранг: 107.2 (ветеран)
Статус: Участник

Создано: 27 июля 2007 19:28 New!
Цитата · Личное сообщение · #4

торри дало "Nothing was found for 'aes 128'"


Ранг: 269.3 (наставник)
Статус: Участник
Advisor

Создано: 27 июля 2007 19:30 New!
Цитата · Личное сообщение · #5

Magister Yoda
Сделай поиск без длины
Ща гляну на болванке,но там кажись *.dcu ,не *.pas


Ранг: 340.0 (мудрец)
Статус: Участник
THETA

Создано: 27 июля 2007 19:32 New!
Цитата · Личное сообщение · #6

Вот, посмотри rapidshare.com/files/45392291/AES.rar.html


Ранг: 269.3 (наставник)
Статус: Участник
Advisor

Создано: 27 июля 2007 19:32 New!
Цитата · Личное сообщение · #7

нашёл чё то вроде.
Держи в аттаче(если приатачиться)

{ Атач доступен только для участников форума } - AES.rar


Ранг: 107.2 (ветеран)
Статус: Участник

Создано: 27 июля 2007 20:26 New!
Цитата · Личное сообщение · #8

Всем спасибо

Ранг: 78.8 (постоянный)
Статус: Участник

Создано: 27 июля 2007 22:26 New!
Цитата · Личное сообщение · #9

--> Overview of the development process for the AES <-- http://tuts4you.com/download.php?view.171


Ранг: 192.7 (ветеран)
Статус: Участник
The ONE

Создано: 20 августа 2007 19:05 New!
Цитата · Личное сообщение · #10

Может у кого-нить есть примерчик на asm для aes 128 по работе с файлами (шифровка, расшифровка) ?


Ранг: 387.4 (мудрец)
Статус: Участник
системщик

Создано: 20 августа 2007 19:44 New!
Цитата · Личное сообщение · #11

TrueLies, какой примерчик? Что тут писать?

Компилишь AES reference code, компилишь MD5, hash пароля пусть будет ключ. Вызываешь reference функцию для инициализации key schedule, устанавливаешь режим CBC (cypher block chaining), читаешь исходный файл по блокам, криптуешь и пишешь новый. Эта, добавь ещё к новому файлу мелкий заголовок - тебе нужен будет оригинальный размер т.к. шифруются данные ведь блоками.


Ранг: 192.7 (ветеран)
Статус: Участник
The ONE

Создано: 21 августа 2007 05:41 New!
Цитата · Личное сообщение · #12

s0larian
Так в том-то и дело что как бы в теории все понятно, а на деле шифрование идет не так как надо (не так, потому, что проверяю другой прогой).
Поэтому и прошу примерчик. Если не трудно, можно даже не файл, а строку - в инете толком ничего нет.


Ранг: 387.4 (мудрец)
Статус: Участник
системщик

Создано: 21 августа 2007 19:49 · Поправил: s0larian New!
Цитата · Личное сообщение · #13

TrueLies, то есть "проверяю другой прогой"? Ты что, пишешь аналог какой-то шифровальной проги? Если так, то совместимости у тебя не получится, т.к. там будут её собственные заголовки, и метод генерации ключей.

По поводу примера - выкладывай сюда исходник на С/С++. В асме не вижу смысла разбираться. Если хочешь, потом переведёшь работающую версию на асм.

По поводу "в инете толком нету", во даёшь. Вот оффицальная реализация: htt_://homes.esat.kuleuven.be/~rijmen/rijndael/rijndaelref.zip в ней тест прога демонстрируящая возможности алго. Компилиццо и работает под cygwin-ом без изменений.


Ранг: 192.7 (ветеран)
Статус: Участник
The ONE

Создано: 22 августа 2007 11:52 · Поправил: TrueLies New!
Цитата · Личное сообщение · #14

Удалено


Ранг: 387.4 (мудрец)
Статус: Участник
системщик

Создано: 22 августа 2007 23:17 New!
Цитата · Личное сообщение · #15

TrueLies пишет:
Делфи слишком тормозная, поэтому выбор пал на асм, тем более что для
него уже есть реализация rijndael, остается только правильно прикрутить ...

эээ... а нах? Ведь производительность важна в двух частях - key setup и decrypt. Обе существуют в оптимизированном С виде - качай отсюда: htt_://homes.esat.kuleuven.be/~rijmen/rijndael/rijndael-fst-3.0.zip

Скомпиль в DLL и вызывай из своего Delphi. Переписыванием своего внешнего цикла перебора паролей на асме ты производительность не улучшишь.

Ранг: 163.7 (ветеран)
Статус: Участник

Создано: 23 августа 2007 04:03 New!
Цитата · Личное сообщение · #16

По-моему, самые быстрые имплементации - не от авторов Rijndael, а от Christophe Devine и Brian Gladman (последние есть на асме и под mmx). Тока почему то все дружно передирают референс алгоритм, который расчитан на Big Endian архитектуру, что даёт дополнительные тормоза на x86 (как и разворачивание циклов)

TrueLies пишет:
как бы в теории все понятно

Кличевое слово - "как бы". Было бы без него, не занимаося бы ерундой (брутом).


Ранг: 192.7 (ветеран)
Статус: Участник
The ONE

Создано: 23 августа 2007 05:50 · Поправил: TrueLies New!
Цитата · Личное сообщение · #17

S_T_A_S_
Есть у меня эта реализация от Christophe Devine и Brian Gladman
А по поводу брута - так я же писал ... это не тупой перебор паролей начиная с ААА, ААБ и т.д - есть алгоритм, который генерит ключи - и они постоянны, поэтому время перебора будет не сотни лет, а несколько минут.

Всем спасибо разобрался!

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 31 марта 2016 18:10 · Поправил: 31 марта 2016 19:01 BfoX New!
Цитата · Личное сообщение · #18

апну тему.
есть проблема с aes192 в режиме cbc c неполным последним блоком. не могу "догнать" как его расшифровать. пробую с opesssl
Code:
  1. v=0xfd;
  2. AES_KEY key;
  3. UCHAR iv[AES_BLOCK_SIZE] = {...}; // инициализируется
  4. AES_set_decrypt_key((unsigned char *) &aes_init, 192, &key);
  5. for(int i=0; i<v/AES_BLOCK_SIZE;i++)
  6.          AES_cbc_encrypt(indata,  outdata, AES_BLOCK_SIZE, &key, iv, AES_DECRYPT);

на выходе 0x0F расшифрованных блоков, iv и последний неполный длиной 0x0d

пробовал
Code:
  1. v=0xfd;
  2. AES_KEY key;
  3. UCHAR iv[AES_BLOCK_SIZE] = {...}; // инициализируется
  4. AES_set_decrypt_key((unsigned char *) &aes_init, 192, &key);
  5. AES_cbc_encrypt(indata,  outdata, v, &key, iv, AES_DECRYPT);

на выходе 0x0F расшифрованных блоков, iv и последний неполный длиной 0x0d неправильно расшифрованный.

может я что-то не так делаю?

Ранг: 575.6 (!)
Статус: Модератор

Создано: 31 марта 2016 18:38 New!
Цитата · Личное сообщение · #19

да однозначно что-то не так. пытаешься блоковый шифр использовать как поточный, например.

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 31 марта 2016 18:58 · Поправил: 31 марта 2016 20:03 BfoX New!
Цитата · Личное сообщение · #20

так и то и то работает. но не до конца.
на DCPCrypter все работает правильно. потрейсил прогу - она c iv работает от последнего полного блока, потом ксорится с последним неполным блоком данных

Добавлено спустя 1 час 1 минуту
в сухом остатке =)

decrypt
Code:
  1. AES_KEY keyD, keyE;
  2. UCHAR iv[AES_BLOCK_SIZE]= {....};
  3. AES_set_decrypt_key((unsigned char *) &aes_init, 192, &keyD);
  4. AES_set_decrypt_key((unsigned char *) &aes_init, 192, &keyE);
  5. AES_cbc_encrypt(inp,  out, (len / AES_BLOCK_SIZE) * AES_BLOCK_SIZE, &keyD, iv, AES_DECRYPT);
  6. AES_encrypt(iv, iv, &keyE);
  7. for(int j=0; j< (len % AES_BLOCK_SIZE); j++)
  8.          out[j] = inp[j] ^ iv[j];


encrypt
Code:
  1. AES_KEY keyE;
  2. UCHAR iv[AES_BLOCK_SIZE]= {....};
  3. AES_set_encrypt_key((unsigned char *) &aes_init, 192, &keyE);
  4. AES_cbc_encrypt(inp,  out, (len / AES_BLOCK_SIZE) * AES_BLOCK_SIZE, &keyE, iv, AES_ENCRYPT);
  5. AES_encrypt(iv, iv, &keyE);
  6. for(int j=0; j< (len % AES_BLOCK_SIZE); j++)
  7.          out[j] = inp[j] ^ iv[j];

Ранг: 575.6 (!)
Статус: Модератор

Создано: 31 марта 2016 20:14 New!
Цитата · Личное сообщение · #21

Ну так не до конца оно работало как раз потому что блоковый шифр отрабатывает данные блоками. Тоесть нужен либо паддинг (стандартный или не очень), либо мудрить как у тебя.
В стандартном случае с паддингом шифртекст будет кратен блоку.

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 31 марта 2016 22:45 New!
Цитата · Личное сообщение · #22

я про стандартный случай (кратность блоку шифрования) знаю и понимаю. сейчас вопрос в другом - почему openssl не делает дешифровку неполного блока

Ранг: 575.6 (!)
Статус: Модератор

Создано: 31 марта 2016 23:23 New!
Цитата · Личное сообщение · #23

Потому что у тебя не стандартный CBC, а openssl работает по стандартным протоколам.

Ранг: 370.2 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 05:01 New!
Цитата · Личное сообщение · #24

BfoX пишет:
почему openssl не делает дешифровку неполного блока

Потому что это невозможно. Зашифровать неполный блок в режиме CBC возможно (он просто дополняется по стандартным схемам паддинга), расшифровать - нет.
То что у тебя в коде - это какая-то самодеятельность, а не CBC.

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 15:35 New!
Цитата · Личное сообщение · #25

ntldr пишет:
Потому что это невозможно


кодес что я привёл делает именно это, что невозможно

Ранг: 370.2 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 16:01 New!
Цитата · Личное сообщение · #26

BfoX пишет:
кодес что я привёл делает именно это, что невозможно

Нет, он делает то что не описано ни в одном стандарте. Это не режим CBC, а черт знает что.

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 16:20 · Поправил: 1 апреля 2016 16:24 BfoX New!
Цитата · Личное сообщение · #27

> Это не режим CBC, а черт знает что

Code:
  1. Cipher Block Chaining (CBC)
  2.  
  3. Для сцепления используется механизм обратной связи, поскольку результат шифрации предыдущих блоков используется для шифрации текущего блока. Таким образом любой блок шифра зависит не только от исходного текста, но и от всех предыдущих блоков текста. В Cipher Block Chaining (CBC) текст XOR’ится с предыдущим шифр. блоком перед шифрацией. Дешифрация проводится аналогично. Математическая запись:
  4.  
  5. Ci = Ek (Pi XOR Ci-1)
  6.  
  7. Pi = Ci-1 XOR Dk(Ci)
  8.  
  9. При этом в начале кодирования используется вектор инициализации для того, чтобы любое сообщение было по - настоящему уникальным (иначе будут трудности со стандартным заголовком). Вектор инициализации должен быть случайным числом. Его не обязательно хранить в секрете, можно передавать его вместе с сообщением.
  10.  
  11. Большинство сообщений не делятся нацело на 64 или 128-битные блоки, обычно остается короткий блок в конце. Можно по-разному бороться с этим. Простейший метод – padding (дополнение до полного блока). Если надо потом убирать мусор, то достаточно просто последним байтом обозначить количество лишних байтов. Можно также обозначать последний байт текста символом конца файла. Это не всегда можно сделать (напр., если надо расшифровать блок и поставить его куда - нибудь в память).
  12.  
  13. Тогда применяется следующая схема шифрования: предположим, в последнем блоке j бит. После зашифровки последнего целого блока, зашифруем шифрованный блок еще раз, выберем j начальных битов полученного текста и по XOR’им с исходным текстом. Это и есть шифр для неполного блока.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 16:27 · Поправил: 1 апреля 2016 16:32 VodoleY New!
Цитата · Личное сообщение · #28

BfoX ну вобщем с аес на тоже натрахался.. ток который якобы из опенссл.. тыж вкурсе что аес.. это группа алго? по факту по дефолту там ридженел. я сравнивал пхп джаву си и делфи код. были разные результаты. это был эпик.. это я с паддингом разбирался.. вобщем там каждый дрочит как хочит. не смотря на РФЦ стандарт. например в пхп и джаве не инициализируется базовая константа.

unit synacrypt;
Code:
  1. function TSynaBlockCipher.EncryptCBC(const Indata: AnsiString): AnsiString;
  2. var
  3.   i: integer;
  4.   s: ansistring;
  5.   l: integer;
  6.   bs: byte;
  7. begin
  8.   Result := '';
  9.   l := Length(InData);
  10.   bs := GetSize;
  11.   CV:=#0+#0+#0+#0+ #0+#0+#0+#0+  #0+#0+#0+#0+  #0+#0+#0+#0; //FACK
  12.   for i:= 1 to (div bs) do
  13.   begin
  14.     s := copy(Indata, (- 1) * bs + 1, bs);
  15.     s := XorString(s, CV);
  16.     s := EncryptECB(s);
  17.     CV := s;
  18.     Result := Result + s;
  19.   end;
  20.   if (l mod bs)<> 0 then
  21.   begin
  22.    //CV:=#0+#0+#0+#0+ #0+#0+#0+#0+  #0+#0+#0+#0+  #0+#0+#0+#0; //FACK
  23.     CV := EncryptECB(CV);
  24.  
  25.     s := copy(Indata, (div bs) * bs + 1, l mod bs);
  26.     s := XorString(s, CV);
  27.     Result := Result + s;
  28.   end;
  29. end;


вот тебе код из синапса либы.. там где фак.. это там где я патчил либу

Добавлено спустя 5 минут
зы. хотелось бы вспомнить старый анекдот..
сидит папа программист.. кодит.. задроченный в хлам..
подходит дочка.. года 4..
-Папа а почему солнышко встает?
- отстань. занять
-Папа а почему солнышко встает?
- отстань. занять
-Папа а почему солнышко встает?
поварачивается.. спрашивает..
- Точно встает?
- точно
-проверяла?
-проверяла
- ВОТ ПУСТЬ ВСТАЕТ. НИЧЕ НЕ ТРОГАЙ ПУСТЬ ВСТАЕТ

Ранг: 388.4 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 16:32 · Поправил: 1 апреля 2016 16:36 BfoX New!
Цитата · Личное сообщение · #29

VodoleY

мне нужно было отсюда в Си
Code:
  1. procedure TDCP_blockcipher128.DecryptCBC(const Indata; var Outdata; Size: longword);
  2. var
  3.   i: longword;
  4.   p1, p2: PByte;
  5.   Temp: array[0..15] of byte;
  6. begin
  7.   if not fInitialized then
  8.     raise EDCP_blockcipher.Create('Cipher not initialized');
  9.   FillChar(Temp, SizeOf(Temp), 0);
  10.   p1:= @Indata;
  11.   p2:= @Outdata;
  12.   for i:= 1 to (Size div 16) do
  13.   begin
  14.     Move(p1^,p2^,16);
  15.     Move(p1^,Temp,16);
  16.     DecryptECB(p2^,p2^);
  17.     XorBlock(p2^,CV,16);
  18.     Move(Temp,CV,16);
  19.     Inc(p1, 16);
  20.     Inc(p2, 16);
  21.   end;
  22.   if (Size mod 16)<> 0 then
  23.   begin
  24.     EncryptECB(CV,CV);
  25.     Move(p1^,p2^,Size mod 16);
  26.     XorBlock(p2^,CV,Size mod 16);
  27.   end;
  28. end;


а "солнышко" пусть встаёт =)

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 1 апреля 2016 16:44 New!
Цитата · Личное сообщение · #30

BfoX я пытался сказать.. что в этом зверинце языков.. каждый дрочит как хочет. перепиши код. чтоб работал.. и не заморачивайся.
ЗЫ. кстати.. синапсис.. была 3тья либа для делфи.. которую я пробовал. ибо в DCP тоже результат не совпал
. 1 . 2 . >>
 eXeL@B —› Программирование —› Шифрование AES-128

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS