Windows C SHA256 Недопустимая проблема создания - PullRequest
0 голосов
/ 20 июня 2010

Привет.У меня очень странная проблема с созданием хешей sha256 .Я сделал простую консольную программу на C, которая использует путь к файлу в качестве аргумента и использует отдельный код sha256, который можно найти здесь .Я скомпилировал программу, используя MinGW 5.1.6 в Windows 7 x64.

При тестировании программы в файле полученный хеш-код неверен.Я убедился в этом, используя md5deep для файла, а затем, используя sha256sum для файла под Linux.Я также убедился, что это не код, скомпилировав и запустив тот же код на моем компьютере с Linux с тем же файлом;полученный хеш был идентичен хешу md5deep и sha256sum.

Я также адаптировал реализацию sha256 Аарона Гиффорда в другую версию моей простой программы и снова выполнил тест на Windows и Linux и закончил стот же результат.

Возможно ли, что проблема вызвана флагами компилятора, которые не были включены?

Мои знания C не удивительны, и мои знания опций компилятораеще хуже, поэтому любая помощь будет любезно оценена.

Код простой программы приведен ниже:

#include <stdio.h>
#include "sha256.h"

#define BUFLEN 16384

int main(int argc, char *argv[]) {
    sha256_context ctx256;
    sha256_starts(&ctx256);
    int kl, l, fd;
    unsigned char buf[BUFLEN];
    FILE *file = (FILE*) 0;
    char *filepath;

    fd = fileno(stdin);

    filepath = argv[1];
    file = fopen(filepath, "r");

    fd = fileno(file);
    while ((l = read(fd, buf, BUFLEN)) > 0) {
        kl += l;
        sha256_update(&ctx256, buf, l);
    }
    fclose(file);
    uint8 sha256sum[32];
    sha256_finish(&ctx256, sha256sum);
    int i;
    for (i = 0; i < 32; i++) {
        printf("%02x", sha256sum[i]);
    }
    printf("\n");

    return 0;
}

1 Ответ

0 голосов
/ 25 ноября 2010

Двоичный режим игнорируется в Linux, но применяется в Windows.Для справки о том, что он делает, смотрите http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.71%29.aspx. Вкратце, \ r \ n переводится в \ n в недвоичном режиме.

...