我使用 OpenSSL SHA256 实现写了这个 C 语言测试。
#include <stdio.h>
#include <string.h>
#include "openssl/sha.h"
int inc(char *str) {
if (!str[0]) return 0;
if (str[0] == 'z') {
str[0] = 'a';
return inc(str + sizeof(char));
}
str[0]++;
return 1;
}
unsigned char buffer[65];
char* hashstring(char *str, int len) {
char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
int i;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str, len);
SHA256_Final(hash, &sha256);
for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
sprintf(buffer + (i * 2), "%02x", hash[i]);
}
return buffer;
}
int main(int argc, char *argv[]) {
int N = 4;
char str[N+1];
int i;
unsigned int tot = 0;
for (i = 0; i < N; i++) str[i] = 'a';
str[N] = 0;
do {
hashstring(str, N);
tot++;
} while(inc(str));
printf("%d\n", tot);
}
编译:
gcc -lcrypto -O3 -o test test.c
以下是结果(我知道,我的电脑名字不太有创意):
nightcracker@nightcracker-pc:~/c/sha256$ time ./test
11881376
real 3m2.431s
user 3m2.335s
sys 0m0.008s
所以每秒会有 11881376 / 182.4 = 65139
个哈希值。然后计算所有哈希值需要 26^7/101821/3600 = 34
小时。请注意,这全部是在一个Q6600四核CPU上的单线程应用程序中完成的,并且不包括将哈希写入文件。
编辑
糟糕,我正在计算所有字符长度及以下字符串的哈希值。已更正并更新数据。