Сейчас на форуме: jinoweb (+5 невидимых)

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


Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

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

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 27 июля 2007 19:26 · Поправил: SLV
· Личное сообщение · #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

-----
Shalom ebanats!





Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

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

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

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

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

-----
Программист SkyNet





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

caee_27.07.2007_CRACKLAB.rU.tgz - AES.rar

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 107.3 (ветеран), 5thx
Активность: 0.20.04
Статус: Участник

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

Всем спасибо



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

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

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




Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

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

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

-----
Сотрудник DHARMA





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

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

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

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




Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

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

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

-----
Сотрудник DHARMA





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

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

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

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

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




Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

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

Удалено

-----
Сотрудник DHARMA





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

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

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

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

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



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

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

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

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

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




Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

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

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

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

-----
Сотрудник DHARMA




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 31 марта 2016 18:10 · Поправил: BfoX
· Личное сообщение · #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 неправильно расшифрованный.

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

-----
...или ты работаешь хорошо, или ты работаешь много...




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

-----
старый пень




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 31 марта 2016 18:58 · Поправил: BfoX
· Личное сообщение · #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];


-----
...или ты работаешь хорошо, или ты работаешь много...




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

-----
старый пень




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

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

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

-----
...или ты работаешь хорошо, или ты работаешь много...




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

-----
старый пень




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

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

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

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

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

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

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


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

-----
...или ты работаешь хорошо, или ты работаешь много...




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

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

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

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

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 01 апреля 2016 16:20 · Поправил: BfoX
· Личное сообщение · #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.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 01 апреля 2016 16:27 · Поправил: VodoleY
· Личное сообщение · #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..
-Папа а почему солнышко встает?
- отстань. занять
-Папа а почему солнышко встает?
- отстань. занять
-Папа а почему солнышко встает?
поварачивается.. спрашивает..
- Точно встает?
- точно
-проверяла?
-проверяла
- ВОТ ПУСТЬ ВСТАЕТ. НИЧЕ НЕ ТРОГАЙ ПУСТЬ ВСТАЕТ

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 397.0 (мудрец), 179thx
Активность: 0.170.1
Статус: Участник

Создано: 01 апреля 2016 16:32 · Поправил: BfoX
· Личное сообщение · #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.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

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

BfoX я пытался сказать.. что в этом зверинце языков.. каждый дрочит как хочет. перепиши код. чтоб работал.. и не заморачивайся.
ЗЫ. кстати.. синапсис.. была 3тья либа для делфи.. которую я пробовал. ибо в DCP тоже результат не совпал

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....



. 1 . 2 . >>
 eXeL@B —› Программирование —› Шифрование AES-128
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати