PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » unsined long


unsined long

Сообщений 1 страница 2 из 2

1

При реализации алгоритма шифрования TEA написанного на Си и
переводе его на РВ выяснилось что он не  работает по банальной
причине - нет unsigned long(int,quad). Может кто-то что нибудь посоветует? Код вот такой

Код:
void encipher(unsigned long   v[],    
              unsigned long   w[],   
              unsigned long   k[])   
{   
    unsigned long  y=v[0], z=v[1], sum=0;      
    unsigned long  delta= 0x12345678;   
    unsigned long  a=k[0], b=k[1], c=k[2], d=k[3];   
    int n=32;   
   
    while(n-->0)   
    {   
        sum += delta;   
        y += (z << 4)+a ^ z+sum ^ (z >> 5)+b;   <----
        z += (y << 4)+c ^ y+sum ^ (y >> 5)+d;   <----Здесь нужны беззнаковые числа.
      }
    w[0]=y; w[1]=z;   <--- Это зашифрованные данные на выходе
}

И почему их нельзя было реализовать в стандарте РВ? Кто нибудь это объяснит?

0

2

Я думаю что основная проблема не из-за не подписанных переменных, а из-за сдвига.
Он арифметический, а должен (судя по всему), быть логическим. http://www.purebasic.fr/english/viewtop … 59#p401059
Решаемо парой асм. инструкций.

alebo62 написал(а):

Кто нибудь это объяснит?

Разработчик может и объяснит. http://www.purebasic.fr/english/memberl … le&u=2

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » unsined long