Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    void stripDupes(char* s)
    {
        int a, b, i, j, k;
        char c, buf[256];
     
        for(i = k = 0; ; ++i) //find all duplicated chars
        {
            c = s[i];
            if(!c)
                break;
            if(c == s[i+1])
            {
                for(j = 0; j < k; ++j)
                    if(c == buf[j])
                        goto skip;
            buf[k++] = c;
    skip:;
            }
        }
     
        for(i = j = 0; ; i++) //strip them
        {
            c = s[i];
            if(!c)
                break;
     
            for(a = b = 0; a < k; ++a)
            {
                if(c == buf[a])
                {
                    b = 1;
                    break;
                }
            }
     
            if(b)
                continue;
     
            s[j] = c;
            j++;
        }
        s[j] = 0;
    }

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 11:50 30-04-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Denglis
    Если подключить регулярные выражения, то код выльестся в строку замены (.)\1+ на \1
     
    ne_viens
    Не получилось у меня проверить работу кода. Попробовал с нуля написать свой, тоже не работает http://pastebin.com/YFjtSv8q

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 21:25 30-04-2013 | Исправлено: AZJIO, 02:19 01-05-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скопируй код из Подробнее... в файл stripdup.c, собери с "cl /Ox stripdup.c" из командной строки MSVC или с "gcc -O2 stripdup.c -o stripdup.exe".

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 14:30 01-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    С таким main() и мой вариант заработал. Только я видимо задачу неправильно понял, я удалил повторы, оставив по одному экзепляру, а не полностью. Заработал стандартно, без спец-ключей.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 05:35 02-05-2013
    Denglis

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Вы правильно поняли: надо только удалить повторы... Спасибо...

    Всего записей: 2 | Зарегистр. 28-04-2013 | Отправлено: 06:02 04-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    http://pastebin.com/aD8ariZM
    Пытаюсь получить рандомный IP в строку. С printf уже получилось, но нужно получить именно строку, чтобы отправить её на возврат в Exit. Проблема с strncat, если удаляю строку код не падает, как только не скланял параметры, уже наизусть их выучил, что указатели, что первая размером позволяющая вместить вторую, всё равно падает.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 13:08 05-05-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    randomIP(char* ip)
    {
        unsigned int i = __rdtsc();
        
        sprintf(ip, "%d.%d.%d.%d", i >> 24, (i >> 16) & 0xff, (i >> 8) & 0xff, i & 0xff);
    }
     
    main()
    {
        char ip[32];
        
        randomIP(ip);
        puts(ip);
    }

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:28 05-05-2013
    kotlomoy



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    Например, так

    Код:
    #define _CRT_RAND_S
    #include <winsock2.h>
    #include <ws2ipdef.h>
    #include <stdlib.h>
    int main() {
        struct in_addr Addr;  
        char * p;
        char Addr_String[ INET_ADDRSTRLEN ];
        rand_s( (unsigned int *)&Addr.S_un.S_addr );
        p = inet_ntoa( Addr );
        strcpy( Addr_String, p );
        };

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

    Всего записей: 172 | Зарегистр. 06-03-2008 | Отправлено: 16:58 05-05-2013 | Исправлено: kotlomoy, 17:02 05-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Необходимо рассчитать хеш Tiger некоторого текста, используя библиотеку Crypto++ (CryptoPP), проблема в том - что я не шарю в C/С++, и по этому не могу понять как это реализовать (вычислить хеш).
     
    Например:
    Есть некий текст "строка1{CRLF}строка2{CRLF} ... строкаN"
    {CRLF} - так я обозначил разрыв строки (не просто CR или LF, а именно CR и LF).
     
    Как я себе это представлю:
     
    Первый вариант

    Код:
     
    #include <iostream>
     
    #include "cryptlib.h"            // 1
    #include "tiger.h"                // 1
     
    int main()
    {
    using namespace std;
     
    string _string = "нужный мне текст";            // 2
    string _hesh = Tiger(_string);                               // 3
    cout << _hesh;
    cin.get();
    return 0;
    }
     

     
    уточнение вышеуказанного псевдо-кода:
    1)

    Код:
    #include "cryptlib.h"
    #include "tiger.h"

    Правильные ли включения я указываю, и какие надо указать еще (если еще вообще надо)
     
    2)

    Код:
    string _string = "нужный мне текст"

    Мне требуется многострочный текст (как указать символы CR и LF)
     
    3)

    Код:
    string _hesh = Tiger(_string)

     
    Функция Tiger() мною указана наугад - я не знаю как она называется в библиотеке Crypto++. Мне нужно узнать: как называется эта функция, какие типы параметров она принимает и возвращает.
     
    Второй вариант
    Я построил решение - вышло несколько DLL-файлов. Как и какую функцию вызывать?
     
    P.S. Мне ненужен хеш файла, нужен хеш нескольких текстов.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 00:52 15-05-2013 | Исправлено: Daniyar91, 14:15 15-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Daniyar91
    Почему именно с этой библиотеки нужен хеш? И почему именно на С/С++? В AutoIt3 есть готовая UDF использующая DLL из Windows.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 15:38 15-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно, я неправильно поставил вопрос, мне не обязательна эта библиотека или C/C++, просто Tiger, я смог найти только в этой библиотеке.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 16:23 15-05-2013
    adasiko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Daniyar91
    на странице авторов этого хэша есть же примеры http://www.cs.technion.ac.il/~biham/Reports/Tiger/

    Всего записей: 1807 | Зарегистр. 30-06-2008 | Отправлено: 16:42 15-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Daniyar91
    Функции _Crypt_HashData и _Crypt_HashFile посмотри в справке AutoIt3-UDF.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 19:23 15-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    adasiko
    Если бы я знал хотя бы азы C/C++, то наверно, то что там есть мне бы помогло.
     
    AZJIO
    Эти функции не подходят потому что в файле Crypt.au3 есть только следующие константы: $CALG_MD2, $CALG_MD4, $CALG_MD5, $CALG_SHA1, $CALG_3DES, $CALG_AES_128, $CALG_AES_192, $CALG_AES_256, $CALG_DES, $CALG_RC2, $CALG_RC4, $CALG_USERKEY т.е нету $CALG_TIGER, и у MS тоже нету.
     
     
    Из переписки непонятно кого, мне стало ясно что у авторов Tiger не хватило ума написать свой алгоритм для Visual Studio, что не есть хорошо. Также стало ясно что у M$ long long называется _int64, что надо удалить LL в конце каждого шестнадцатеричного значения, что отсутствуют протатипы функций strlen() и printf() и еще что-то не работает.
    Из всего этого выходит что лучше не пытаться что-то делать с их оригинальными исходниками а использовать библиотеку Crypto++, так как она нормально компилируется.
     
    Я так понимаю что эта функция(которая рассчитывает Tiger) должна быть в скомпилированном файле cryptopp.dll, отсюда вопрос - что эта за функция и как ее использовать?

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 21:21 15-05-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tiger в многих crypto библиотеках есть. Я для себя из LibTomCrypt выдернул:
    http://pastebin.com/sfU2DnUd

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 00:01 16-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Tiger в многих crypto библиотеках есть

    Код который ты указал очень сильно походит на тот что в Crypto++ т.е. получается что Tom St Denis скопипиздил его и немного поменял ну или наоборот.
     
     

    Код:
    main()
    {
        hash_state md;
        unsigned char hash [3*8];
     
        tiger_init(&md);
        tiger_process(&md, "Tiger", 5);
        tiger_done(&md, hash);

    }

     
    Код компилируется но при запуске программа сразу же закрывается ничего не происходит
     
    Я так панимаю что:

    Код:
    tiger_process(&md, "Tiger", 5);

    &md - я так и не понял что это такое
    "Tiger" - это те данные хеш которых нам надо вычислить?
    5 - размер данных (в данном случае пять байт, так как данные это "Tiger")?

    Код:
    tiger_done(&md, hash);

    ну а эта строка должна наверно показать хеш? если так, то почему ничего не отображается?

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 04:36 16-05-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Неа, это только пример вызова Tigera.
    Чтобы отображалось, надо чуть больше кода:
        main()
        {
                int i;
                hash_state md;
                unsigned char hash[3*8];
             
                tiger_init(&md);
                tiger_process(&md, "Tiger", 5);
                tiger_done(&md, hash);
     
                for(i = 0; i < sizeof(hash); ++i)
                       printf("%02x", hash[i]);
        }

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 09:34 16-05-2013 | Исправлено: ne_viens, 09:34 16-05-2013
    SenatkinO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Все добрый День! Помогите пожалуйста! Нужна программа на Делфи которая проверяет работу схемы!!! Это дипломная работа! ЗАранее всем благодарен!!!!!!!!!

    Всего записей: 3 | Зарегистр. 16-05-2013 | Отправлено: 14:19 16-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    в коде что ты дал, выше main() есть закомментированные строки
    Там - Hash of "Tiger": = 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDF
    а у нас отображается = DD00230799F5009F EC6DEBC838BB6A27 DF2B9D6F110C7937
     
    не стал парится, просто написал следующее

    Код:
    main()
    {
        ...
        ...
        for(i = 7; i >= 0; --i)
            printf("%02x", hash[i]);
        for(i = 15; i >= 8; --i)
            printf("%02x", hash[i]);
        for(i = 23; i >= 16; --i)
            printf("%02x", hash[i]);
    }

    и все стало нормально.
     
     
    И еще вопрос - как передать разрыв строки (CR и LF)?
    Например, tiger_process(&md, "строка1{CRLF}строка2", 2048);
    и последний вопрос - если просто CR или LF то они занимают 1 байт, а CR и LF 2 байта?

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 14:59 16-05-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В коде Hash of "Tiger" представлен в виде трёх unsigned long long, а не 24 unsigned char. В жизни всегда 2 вариант применяется. Можно в CryptoBench посмотреть, например.
     
    Что из себя представляет текст, который надо похашить и какая его длина? Обычный txt файл, открытый в Notepad'е? Тогда лучше всего собрать win приложение с EditBox'ом, в который кидать текст с копипастой, потом похашить кнопкой OK. Это надо будет ещё дофига строк кода добавлять (штук 20-30 примерно).
     
    CR,LF занимает 2 байта.
    И не хорошая это идея хашить текст с переводами строк, так как на других опсистемах переводы могут состоять только из CR или LF, и, соответственно, там хаши будут отличатся.

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 15:21 16-05-2013 | Исправлено: ne_viens, 15:36 16-05-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru