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

 eXeL@B —› Программирование —› Алгоритм TEA
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 сентября 2011 22:45 · Поправил: Isaev
· Личное сообщение · #1

Надо реализовать TEA на сях и Delphi
Проблема в том, что нет образца
SnD Reverser Tool почему-то при ключе=00 и значении=00 ответ тоже 00 выдаёт, что по алго быть в теории не должно... (значения в HEX)

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 04 сентября 2011 22:52 · Поправил: reversecode
· Личное сообщение · #2

в Сях правильно указан експорт dll функции TeaEncrypt ? тип передаваемых параметров
pascal/итд

там же в wiki
http://www.cix.co.uk/~klockstone/teavect.htm
тест вектора для проверки алго

Vovan666
глянь ту да же http://www.cix.co.uk/~klockstone/teavect.htm, помоему xtea там простой
если есть сомнения, то возможно то уже разные модификации

| Сообщение посчитали полезным: Isaev

Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 04 сентября 2011 22:55 · Поправил: Ultras
· Личное сообщение · #3

Онлайновые: Раз и Два

-----
.[ rE! p0w4 ].




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 04 сентября 2011 23:09
· Личное сообщение · #4

На днях тоже искал реализацию xTea, вариантов куча и все считают по-своему.
Если у кого есть реализация где которая может вот так :
34529087t6w4y456g - key
3-2-dDt-43 - decryptet
B09665D2728979A784A5 - encrypted
выложите пожалуйста.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 00:54 · Поправил: Isaev
· Личное сообщение · #5

reversecode пишет:
в Сях правильно указан експорт dll функции TeaEncrypt ? тип передаваемых параметровpascal/итд

я же не из dll вызываю, просто переименовал
Code:
  1. void TeaEncrypt(uint32_t* v, uint32_t* k) {
  2.     uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
  3.     uint32_t delta=0x9e3779b9; /* a key schedule constant */
  4.     uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
  5.     for (i=0; i < 32; i++) { /* basic cycle start */
  6.         sum += delta;
  7.         v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
  8.         v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
  9.     }                                              /* end cycle */
  10.     v[0]=v0; v[1]=v1;
  11. }


Ultras пишет:
Онлайновые: Раз и Два

Раз вообще не понятно что и как считает, а Два выдаёт совсем странные результаты

Vovan666 XTEA в вики тоже есть реализация на си

PS: при переводе на Delphi где косяк?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 сентября 2011 01:11
· Личное сообщение · #6

Isaev пишет:
PS: при переводе на Delphi где косяк?

с первого взгляда вроде нет ошибок, правда я в делфи не очень))
как там будет цикл "To 32" включительно или нет
может здесь ошибка, и лишний раз прокручивается

хотя кто мешает сделать дебаг printf в каждой итерации цикла
и ты сразу увидешь на какой итерации не правильно считает




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 01:14 · Поправил: Isaev
· Личное сообщение · #7

reversecode да уже поправил, но не лучше
с дебагом сложнее...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 сентября 2011 01:17 · Поправил: reversecode
· Личное сообщение · #8

printf под никсами есть)
вставь для распечатки каждых значений которые надо
printf("%d",v0); или printf("%x",v0); если в хексовом ну итд
переменные вместо V[0] подставляй
#include <stdlib.h> кажись для printf
в консоль посыпется вывод, если консольная прога

Code:
  1. void TeaEncrypt(uint32_t* v, uint32_t* k)
  2. {
  3.     uint32_t v0=v[0], v1=v[1], sum=0, i;
  4.     uint32_t delta=0x9e3779b9;
  5.     uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];
  6.  
  7.     for (i=0; i < 32; i++)
  8.     {
  9.         sum += delta;
  10.         v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
  11.         v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
  12.         printf("v0 %x, v1 %x, i %d\n", v0, v1, i);
  13.     }
  14.     v[0]=v0;
  15.     v[1]=v1;
  16. }


Code:
  1.         printf("v0 %04x, v1 %04x, i %d\n", v0, v1, i);

04 можно для форматирования добавить и заполнения нулями




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 01:30
· Личное сообщение · #9

расхождения в v0 и v1 уже при втором проходе

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 05 сентября 2011 01:36
· Личное сообщение · #10

Isaev
Жесть, вы не можете две операции отладить? Скорее всего дело в неправильной замене операций сдвигов и логики. Можно для надежности поставить маску через And или перепроверить все дискретные операции, сделав для них временные переменные (типа t := v1<<4; t := t + k0); и т.д.).




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 05 сентября 2011 01:39
· Личное сообщение · #11

можно поступить по другому
соптимизировать на Си код до такого как у тебя на Делфи
где сразу к [] массиву обращение
проверить как там с дебаг выводом
и если все еще расхождения, загрузить в IDA оба варианта и посмотреть как генерится asm код, для обоих реализаций




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 01:45 · Поправил: Isaev
· Личное сообщение · #12

int пишет:
Жесть, вы не можете две операции отладить?

сам не ожидал
reversecode пишет:
загрузить в IDA оба варианта и посмотреть как генерится asm код, для обоих реализаций

несомненно, но геморно... Больше всего не хотелось вникать в чудокод компиляторов
потому и запостил, в надежде что чей-то трезвый взгляд сразу укажет на страшный косяк, что съэкономит кучу времени... Ладно, пойдём медленно, но верно

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 05 сентября 2011 02:06
· Личное сообщение · #13

не знаю как ТЕА, а ХТЕА в ВИКИ кривой. Столкнулся с этим когда скопипастил для первого задания в контесте 2010 (от PE Kill'a)

Code:
  1. void xtea_encipher(uint32_t* vi, uint32_t* vo, uint32_t* k) 
  2. {
  3.     unsigned int i;
  4.  
  5.     uint32_t v0=vi[0], v1=vi[1], sum=0, delta=0x9E3779B9;
  6.     for (i=0; i < 32; i++) {
  7.     v0 += k[(sum & 3)] + (sum ^ (v1 + ((v1 >> 5) ^ (v1 << 4))));
  8.     sum += delta;
  9.     v1 += k[(sum >> 11) & 3] + (sum ^ (v0 + ((v0 >> 5) ^ (v0 << 4))));
  10.  
  11. /* // fault implementation on http://ru.wikipedia.org/wiki/XTEA
  12.         v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
  13.         sum += delta;
  14.         v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
  15. */
  16.     }
  17.     vo[0]=v0; vo[1]=v1;
  18. }
  19.  
  20. void xtea_decipher(uint32_t* vi, uint32_t* vo, uint32_t* k) 
  21. {
  22.     unsigned int i;
  23.  
  24.     uint32_t v0=vi[0], v1=vi[1], delta=0x9E3779B9, sum=delta*32;
  25.     for (i=0; i < 32; i++) {
  26.     v1 -= k[(sum >> 11) & 3] + (sum ^ (v0 + ((v0 >> 5) ^ (v0 << 4))));
  27.     sum -= delta;
  28.     v0 -= k[(sum & 3)] + (sum ^ (v1 + ((v1 >> 5) ^ (v1 << 4))));
  29.  
  30. /* // fault implementation on http://ru.wikipedia.org/wiki/XTEA
  31.         v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
  32.         sum -= delta;
  33.         v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
  34. */
  35.          }
  36.     vo[0]=v0; vo[1]=v1;
  37. }


-----
127.0.0.1, sweet 127.0.0.1





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 02:31 · Поправил: Isaev
· Личное сообщение · #14

Code:
  1.          a=(v1<<4) + k0;
  2.          b=v1 + sum;
  3.          c=(v1>>5) + k1;
  4.  
  5.          v0 += a ^ b ^ c;

Code:
  1.       A:=(V[1] Shl 4)+K[0];
  2.       B:=V[1]+Sum;
  3.       C:=(V[1] Shr 5)+K[1];
  4.  
  5.       V0:=V0+Xor B Xor C;


a==A; b==B; c==C;
V0!=v0;
т.е. ^ это не Xor?

PS: зараза, + приоритетнее xor
точнее одинакового, но
"При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо"

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 05 сентября 2011 02:47
· Личное сообщение · #15

OKOB пишет:
fault implementation

дык, поправил бы, это же википедия (и не забывайте, кстати, что у нас своя есть)

Isaev пишет:
зараза, + приоритетнее xor

делфи сакс...




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 02:52
· Личное сообщение · #16

А как теперь проверить TEA ли это вообще и не накосячили ли в вики снова?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 05 сентября 2011 05:57 · Поправил: ClockMan
· Личное сообщение · #17

Isaev
--> Link <--

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 05 сентября 2011 06:03
· Личное сообщение · #18

reversecode же дал ссылку для проверки вектора http://www.cix.co.uk/~klockstone/teavect.htm

-----
Yann Tiersen best and do not fuck





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 08:41
· Личное сообщение · #19

ClockMan там XTEA

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 05 сентября 2011 10:59
· Личное сообщение · #20

это ищите?

2036_05.09.2011_EXELAB.rU.tgz - tea.rar



Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 05 сентября 2011 11:25 · Поправил: vptrlx
· Личное сообщение · #21

int пишет:
Isaev пишет:зараза, + приоритетнее xor
делфи сакс...

эм. так везде вообще-то.
Code:
  1.          int a = 1, b = 2, c = 3;
  2.          cout << (a+b^c);

это 0.

add: не знаю насчёт равного приоритета в дельфях, но в сях + именно приоритетнее.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 05 сентября 2011 13:07
· Личное сообщение · #22

OKOB
Как-то брал код оттуда для одного проекта, всё работало аналогично проге, которую исследовал.
Видать девелоперы уже понахватали эту реализацию с вики, и теперь её можно брать за стандарт
И кстати, результат работы кода с вики совпадает с результатом работы SnD Reverser Tool 1.4

-----
Research For Food





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 05 сентября 2011 13:45 · Поправил: PE_Kill
· Личное сообщение · #23

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

-----
Yann Tiersen best and do not fuck





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 05 сентября 2011 16:59
· Личное сообщение · #24

OKOB пишет:
не знаю как ТЕА, а ХТЕА в ВИКИ кривой. Столкнулся с этим когда скопипастил для первого задания в контесте 2010 (от PE Kill'a)

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

а в крекми приятнее не стандарт использовать

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 06 сентября 2011 09:26
· Личное сообщение · #25

Isaev кода мне надобыло на делфи тиа я использовал библиотеку dcpcrypt2 под делфи. остался доволен. (там кстати много чего еще есть)

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


| Сообщение посчитали полезным: Isaev


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 сентября 2011 20:12 · Поправил: ajax
· Личное сообщение · #26

Isaev
SnD Reverser Tool
В аццкую топку. Сырков, погуглив, завались

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 07 сентября 2011 11:45
· Личное сообщение · #27

в том числе выложенный мною готовый проект чуть выше, видимо никто не заметил




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 07 сентября 2011 22:54
· Личное сообщение · #28

Av0id пишет:
выложенный мною готовый проект чуть выше, видимо никто не заметил

конечно заметили, спс
только мы как раз с си переводили на дельфи, а проект на си, и в общем те же функции с вики что для tea, что для xtea... Видимо вы его выложили не вчитываясь в суть проблемы.
В общем вопрос решён, надо наверное закрыть, всем спс за участие
Может кому пригодится
Code:
  1. Procedure TeaEncrypt(Var V:Array Of Cardinal;K:Array Of Cardinal);
  2. Var
  3.   Sum:Cardinal;
  4.   I:Byte;
  5. Const
  6.   Delta=$9E3779B9;
  7. Begin
  8.   Sum:=0;
  9.   For I:=0 To 31 Do
  10.     Begin
  11.       Sum:=Sum+Delta;
  12.       V[0]:=V[1] Shl 4+K[0] Xor (V[1]+Sum) Xor (V[1] Shr 5+K[1])+V[0];
  13.       V[1]:=V[0] Shl 4+K[2] Xor (V[0]+Sum) Xor (V[0] Shr 5+K[3])+V[1];
  14.     End;
  15. End;
  16.  
  17. Procedure TeaDecrypt(Var V:Array Of Cardinal;K:Array Of Cardinal);
  18. Var
  19.   Sum:Cardinal;
  20.   I:Byte;
  21. Const
  22.   Delta=$9E3779B9;
  23. Begin
  24.   Sum:=$C6EF3720;
  25.   For I:=0 To 31 Do
  26.     Begin
  27.       V[1]:=V[1]-((V[0] Shl 4+K[2]) Xor (V[0]+Sum) Xor (V[0] Shr 5+K[3]));
  28.       V[0]:=V[0]-((V[1] Shl 4+K[0]) Xor (V[1]+Sum) Xor (V[1] Shr 5+K[1]));
  29.       Sum:=Sum-Delta;
  30.     End;
  31. End;


-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



 eXeL@B —› Программирование —› Алгоритм TEA
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати