错误的sha1输出十六进制

时间:2017-04-29 13:20:58

标签: c openssl sha1

我的代码应该从字符串内容计算sha1哈希值,然后将其打印为十六进制值。

主要功能:

#include <openssl/sha.h>
int main(){
  unsigned char str[] = "A";
  unsigned char hash[SHA_DIGEST_LENGTH]; // == 20
  SHA1(str, sizeof(str), hash);
  printHash(hash);
  return 0;
}

printHash功能:

void printHash(unsigned char *hash){
  if(hash == NULL){
    printf("HASH NULL\n");
    return;
  }
  for (int i = 0; i < SHA_DIGEST_LENGTH; i++){
    printf("%02X\n", hash[i]);
  }
}

字符串的输出&#34; A&#34;是:

EF420ABFDDBDA7B9EE665D85EF62E4A437554003

但是当我尝试这样一个网站:http://www.sha1-online.com/时,我得到了这个结果:

6dcd4ce23d88e2ee9568ba546c007c63d9131c1b

为什么会有区别?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我的愚蠢错误,我改变了这句话:

SHA1(str, sizeof(str), hash);

SHA1(str, sizeof(str)-1, hash);

现在一切正常,谢谢