2

Cコードは次のとおりです。

#include <openssl/sha.h>
#include <stdio.h>
char *hash_sha512(char *data){
    SHA512_CTX ctx;
    char *md=malloc(sizeof(char)*(SHA512_DIGEST_LENGTH+1));

    SHA512_Init(&ctx);
    SHA512_Update(&ctx, data, strlen(data));
    SHA512_Final(md, &ctx);
    md[SHA512_DIGEST_LENGTH]='\0';

    return md;
}
int main(int argc, char *argv[]){
    str=hash_sha512("GFLOuJnR19881218");
    printf("%s\n", str);
    free(str);
    return 1;
}

出力:

�&lt;�4����IIA[r��Η#�6π�8jD����J�b9��ږ��^X�</ p>

PHPコードは次のとおりです。

$hash=hash('sha512', 'GFLOuJnR19881218', TRUE);

出力:

�&lt;��>4��ǰ��II�-A[r�?���Η#��D6π�8jD���?���J�b9��ږ��^X�</ p>

CコードとPHPコードの結果は異なりますが、私のコードの何が問題になっていますか?

4

1 に答える 1

3

出力がバイナリ文字列であり、ブラウザがASCIIまたはUTF-8として表示しようとしていて、表示できないため、出力が文字化けします。両方を16進数、10進数、base32、またはその他の通常の人間の表現としてエンコードしてから、それらを比較する必要があります。

$binary = hash('sha512', 'GFLOuJnR19881218', TRUE);
$hex = hash('sha512', 'GFLOuJnR19881218');
string hash ( string $algo , string $data [, bool $raw_output = false ] )  

TRUEに設定すると、生のバイナリデータを出力します。FALSEは、小文字のヘキシットを出力します。
-http: //us2.php.net/manual/en/function.hash.php

于 2012-10-23T16:52:05.417 に答える