Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблемка с BlowFish


Автор: Nord2008 29.3.2009, 19:50
Здраствуйте! Есть проблемка: надо зашифровать строку алгоритмом BlowFish. Но там на входе для шифровки нужно передать переведенную строку в unsigned int. Проблема моя состоит в том что не могу конвертнуть строку в unsigned int и после расшифровки обратно.
Вот мой код использования BlowFish:
Код

        Blowfish BF;
        unsigned int i;
        DWord ar;

        char *pswd = {"abcdefghijklmnopqrstuvwxyz"};
        char* st = "Привет этому классному миру!";
        char* tm;

        for (int i=0;i < strlen(st)-1;i++)
        {
           cout << st[i] << endl;
        }
        unsigned int Clr0 = reinterpret_cast<unsigned int>(st);

        qDebug() << Clr0 << "__stroka v 4islo";

        ar.word0.word = Clr0;
        BF.Set_Passwd(pswd);
        BF.Encrypt((void *)&ar,16);


        qDebug() << ar.word0.word << "__crypt 4islo";
   

        char *r;
       

        qDebug() << r << "__crypt stroka";

        ar.word0.word = reinterpret_cast<unsigned int>(r);

        qDebug() << r<<"___crypt 4islo";

        BF.Decrypt((void *)&ar,16);

        qDebug() << ar.word0.word << "__decrypt 4islo";

        unsigned int io = ar.word0.word;
        char* tmp = itoa(io);

        qDebug() << tr(tmp) << "__decrypt stroka";


В результате вот что выводится:
Цитата

134965148 __stroka v 4islo 
2611492833 __crypt 4islo 
hU›¿;V)·Øc›¿ __crypt stroka 
hU›¿;V)·Øc›¿ ___crypt 4islo 
3418717644 __decrypt 4islo 
"-876249652" __decrypt stroka 

 smile 

Прикладываю реализацию Blowfish.

Автор: Alca 29.3.2009, 22:01
дел

Автор: Nord2008 29.3.2009, 22:26
Почему Alca дел то? Что то не то написал?

Автор: Vaulter 30.3.2009, 00:16
Цитата(Nord2008 @  29.3.2009,  20:50 Найти цитируемый пост)
Но там на входе для шифровки нужно передать переведенную строку в unsigned int.

там - это где?
строку

Цитата

unsigned int Clr0 = reinterpret_cast<unsigned int>(st);


в Clr0 преобразованный в целое ПЕРВЫЙ СИМВОЛ ИЗ st, если не АДРЕС ПЕРВОГО СИМВОЛА, что более вероятно smile
 char* st = "Привет этому классному миру!";

st - по сути указатель на первый символ, массива из символов, оканчивающихся \0


 reinterpret_cast<unsigned int>(st); НИКАК не преобразует, то, что ты понимаешь под СТРОКА в чтото большее нежели ОДНО число беззнаковое....

поэтому.
дел
smile

Добавлено через 2 минуты и 49 секунд
на будущее, избегай имен в виде st, re, to, и прочее...
static? store? string!? stoopid :(

я бы strTo
 smile 
 smile 

Автор: Alca 30.3.2009, 09:10
Цитата

Код

ar.word0.word = Clr0;


Что ты здесь делаешь?

Автор: xvr 30.3.2009, 12:19
Не нужен ему никакой DWord на вход - подавай исходную строку как есть. Только учти, что ее длинна должна быть кратной 8ми (для Blowfish). Можно строку добить пробелами (или нулями)

Автор: Alca 30.3.2009, 12:37
BlowFish.zip

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)