0
我需要從文件內容生成SHA-1代碼(例如,具有不同名稱的相同圖像會生成相同的代碼)。我寧願使用openssl,因爲it seems to be the more performant。從文件內容生成sha-1
在this問題是解釋如何從文件內容獲取SHA-1,但它不保證爲某些文件工作。
有這個問題的任何解決方案(甚至使用其他庫比openssl,但性能真的很重要)。
我需要從文件內容生成SHA-1代碼(例如,具有不同名稱的相同圖像會生成相同的代碼)。我寧願使用openssl,因爲it seems to be the more performant。從文件內容生成sha-1
在this問題是解釋如何從文件內容獲取SHA-1,但它不保證爲某些文件工作。
有這個問題的任何解決方案(甚至使用其他庫比openssl,但性能真的很重要)。
該實施例說明如何生成SHA1從文件消化和用openssl在其十六進制表示其顯示:
#include <stdio.h>
#include <openssl/sha.h>
#define MAX_BUF_LEN (1024 * 8)
int sha1(const char * name, unsigned char * out)
{
FILE * pf;
unsigned char buf[ MAX_BUF_LEN ];
SHA_CTX ctxt;
pf = fopen(name, "rb");
if(!pf)
return -1;
SHA1_Init(&ctxt);
while(1)
{
size_t len;
len = fread(buf, 1, MAX_BUF_LEN, pf);
if(len <= 0)
break;
SHA1_Update(&ctxt, buf, len);
}
fclose(pf);
SHA1_Final(out, &ctxt);
return 0;
}
void bin2hex(unsigned char * src, int len, char * hex)
{
int i, j;
for(i = 0, j = 0; i < len; i++, j+=2)
sprintf(&hex[j], "%02x", src[i]);
}
int main(int argc, char * argv[])
{
unsigned char digest[ SHA_DIGEST_LENGTH ];
char str[ (SHA_DIGEST_LENGTH * 2) + 1 ];
if(sha1(argv[1], digest))
{
printf("Error!\n");
return 1;
}
bin2hex(digest, sizeof(digest), str);
printf("SHA1: %s\n", str);
return 0;
}
/* eof */
編譯:
$ gcc sha1.c -lcrypto -o sha1
測試:
$ cat file.txt
The quick brown fox jumps over the lazy dog
$ ./sha1 file.txt
SHA1: be417768b5c3c5c1d9bcb2e7c119196dd76b5570
$ sha1sum file.txt
be417768b5c3c5c1d9bcb2e7c119196dd76b5570 file.txt
Voilá!沒有神祕!
http://stackoverflow.com/questions/3467097/correctly-getting-sha-1-for-files-using-openssl – Lacobus
我已經鏈接了這個問題:它沒有提供解決方案。 – justHelloWorld