Хэширование чисел в sha224

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Trilgon, 17 Sep 2017.

  1. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    Code:
    // cl /EHsc hashNumbas.cpp sha224.cpp
    #include <stdlib.h>
    #include <stdio.h>
    #include "sha224.h"
    
    int main()
    {
      SHA224 ctx = SHA224();
      ctx.init();
       
       FILE* f = fopen("numbas.txt", "r");
    
       double x;
       while(1 == fscanf(f, "%lf\r\n", &x))
       {
         printf("%.16f\n", x);
         ctx.update((unsigned char*)&x, sizeof(x));
       }
       fclose(f);
    
       unsigned char digest[SHA224::DIGEST_SIZE];
       ctx.final(digest);
    
      for(int i = 0; i < SHA224::DIGEST_SIZE; ++i)
         printf("%02x", digest[i]);
       printf("\n");
       return 0;
    }
    
    Если требуется хэш не double чисел, а просто текста в файле,
    тогда ctx.update цикл будет:

    Code:
    //...
      char buf[32];
       while(fgets(buf, sizeof(buf), f))
       {
         printf("%s", buf);
         ctx.update((unsigned char*)buf, strlen(buf) - 1);
       }
       fclose(f);
    //...
    
     
    Trilgon likes this.
  2. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    ---------------------------
    Microsoft Visual C++ Runtime Library
    ---------------------------
    Debug Assertion Failed!

    Program: ...Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.exe
    File: minkernel\crts\ucrt\src\appcrt\stdio\input.cpp
    Line: 29

    Expression: stream != nullptr

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)

    Выдал ошибку
     
  3. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    При компиляции ошибок не выдавал вроде
    1>------ Перестроение всех файлов начато: проект: Crash safer, Конфигурация: Debug Win32 ------
    1>sha224.cpp
    1>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\sha224.cpp(129): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(1772): note: см. объявление "sprintf"
    1>Generator.cpp
    1>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\generator.cpp(10): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(207): note: см. объявление "fopen"
    1>c:\users\r2bdo\documents\visual studio 2017\projects\crash safer\crash safer\generator.cpp(13): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>c:\program files (x86)\windows kits\10\include\10.0.15063.0\ucrt\stdio.h(1195): note: см. объявление "fscanf"
    1>Создание кода...
    1>Crash safer.vcxproj -> C:\Users\R2BDO\Documents\Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.exe
    1>Crash safer.vcxproj -> C:\Users\R2BDO\Documents\Visual Studio 2017\Projects\Crash safer\Debug\Crash safer.pdb (Partial PDB)
    1>Сборка проекта "Crash safer.vcxproj" завершена.
    ========== Перестроение всех проектов: успешно: 1, с ошибками: 0, пропущено: 0 ==========
     
  4. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    FILE* f = fopen("numbas.txt", "r");
    if(!f)
    {
    puts("Error, input file numbas.txt not found, exiting...");
    getchar();
    return -1;
    }
    //...
     
    Trilgon likes this.
  5. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    И что это даёт?)Ну да,ошибка не вылезает,но прога то не работает как надо всё равно.
     
  6. Evan

    Evan Banned

    Joined:
    19 Aug 2016
    Messages:
    78
    Likes Received:
    203
    Reputations:
    0
    Не находит файл numbas.txt что ли? Если запускаешь прогу непосредственно из студии, то искать этот файл она будет не в папке с готовым екзешником, а в папке с исходным кодом проекта. По крайней мере в студии 2013 так.
     
    Trilgon likes this.
  7. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Суть в том,что он пишет только хэш последнего числа.
     
  8. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Пример работы программы:
    ...
    115
    116
    117
    118
    119
    120
    121
    122
    794293b5706d6f85da86d164393511bb834cd222812a2016e68bb54c
    (на этом программа заканчивается,так как 122 последнее число)
     
  9. Evan

    Evan Banned

    Joined:
    19 Aug 2016
    Messages:
    78
    Likes Received:
    203
    Reputations:
    0
    Так это уже зависит от того по какому образцу ты вывод делал. Елси по тому что приведено выше, то вроде бы там так и задумано, вывод только последнего хэша. Чтобы выводило хэш от каждой строки, нужно вычисление и распечатку хэша перенести в цикл while.
    Code:
    // cl /EHsc hashNumbas.cpp sha224.cpp
    #include <stdlib.h>
    #include <stdio.h>
    #include "sha224.h"
    
    int main()
    {
      SHA224 ctx = SHA224();
    
     
       FILE* f = fopen("numbas.txt", "r");
    
       char buf[32];
       unsigned char digest[SHA224::DIGEST_SIZE];
       while (fgets(buf, sizeof(buf), f))
       {
         printf("%s", buf);
         ctx.init();
         ctx.update((unsigned char*)buf, strlen(buf) - 1);
         ctx.final(digest);
         for (int i = 0; i < SHA224::DIGEST_SIZE; ++i)
             printf("%02x", digest[i]);
         printf("\n");
       }
       fclose(f);
    
       return 0;
    Вот так должно по идее от каждой распечатывать.
     
    Trilgon likes this.
  10. neviens

    neviens Member

    Joined:
    9 Oct 2013
    Messages:
    82
    Likes Received:
    28
    Reputations:
    3
    Пишет соответственно техническому заданию:
    - SHA224 хеш всех чисел в файле.
     
    Trilgon likes this.
  11. Trilgon

    Trilgon New Member

    Joined:
    5 Jul 2017
    Messages:
    32
    Likes Received:
    0
    Reputations:
    0
    Да я понял уже:) спасибо всем за помощь.