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;
}

输出:

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

这是PHP代码:

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

输出:

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

C代码和PHP代码的结果不同,我的代码有什么问题?

4

1 回答 1

3

输出是乱码,因为输出是一个二进制字符串,浏览器试图将其显示为 ASCII 或 UTF-8 并且不能。您需要将两者编码为十六进制、十进制、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 回答