0

ちょっと、そこ。sha256ハッシュの作成で非常に奇妙な問題が発生しています。ファイル パスを引数として取り、スタンドアロンの sha256 コードを使用する単純な C コンソール プログラムを作成しまし。Windows 7 x64 で MinGW 5.1.6 を使用してプログラムをコンパイルしました。

ファイルでプログラムをテストすると、結果のハッシュが間違っています。ファイルに対してmd5deepを使用し、次にLinux でファイルに対して sha256sumを使用して、これを確認しました。また、同じファイルを使用して Linux ボックスで同じコードをコンパイルして実行することにより、それがコードではないことを確認しました。それが生成したハッシュは、md5deep および sha256sum によって生成されたものと同じでした。

また、Aaron Gifford の 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;
}
4

1 に答える 1

0

バイナリモードはLinuxでは無視されますが、Windowsでは適用されます。何をするかについては、http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.71%29.aspxを参照してください。つまり、\ r\nは非バイナリモードで\nに変換されます。

于 2010-11-25T20:26:08.817 に答える