这是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
这是PHP代码:
$hash=hash('sha512', 'GFLOuJnR19881218', TRUE);
输出:
&lt; &gt;4 ǰ II -A [r ? Η# D6π 8jD ? J b9 ږ ^ X
C代码和PHP代码的结果不同,我的代码出了什么问题?
答案 0 :(得分: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