我想知道根据不同的字符集破解哈希所需的数学时间.
例如,仅使用7个字母,US-ASCII字母字符,我们知道可以使用26 7个可能的序列.知道每分钟计算机可以生成多少这些可以让我了解生成所有可能的哈希值并破解某个7字符哈希(抛开生日攻击)需要多长时间.
例如,取上面的数字,如果现代四核可以每分钟产生100万个哈希值,那么8031810176 / 1000000 / 60 = 133.86在该范围内找到所有可能的哈希值需要数小时.
此外,具有原生AES的新型Sandy Bridge英特尔芯片如何发挥作用?
orl*_*rlp 11
我使用OpenSSL SHA256实现在C中编写了这个测试.
#include <stdio.h>
#include <string.h>
#include "openssl/sha.h"
// http://stackoverflow.com/questions/4764608/generate-all-strings-under-length-n-in-c/4764686#4764686
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]; // the openssl hash
SHA256_CTX sha256;
int i; // counter
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]); // convert openssl hash to mortal human string
}
return buffer;
}
int main(int argc, char *argv[]) {
int N = 4; // max length string
char str[N+1]; // the string holder
int i; // counter
unsigned int tot = 0; // number of hashes calculated
for (i = 0; i < N; i++) str[i] = 'a';
str[N] = 0;
do {
hashstring(str, N);
tot++;
} while(inc(str));
printf("%d\n", tot);
}
Run Code Online (Sandbox Code Playgroud)
编译:
gcc -lcrypto -O3 -o test test.c
Run Code Online (Sandbox Code Playgroud)
结果(我知道,我对计算机名称不是很有创意):
nightcracker@nightcracker-pc:~/c/sha256$ time ./test
11881376
real 3m2.431s
user 3m2.335s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
所以这是11881376 / 182.4 = 65139每秒的哈希值.然后是26^7/101821/3600 = 34几个小时来计算所有哈希值.请注意,所有这些都是在单线程应用程序中的Q6600四核CPU上完成的,并且不包括将散列写入文件.
编辑
Woops,我正在计算N个字符及以下字符串的所有哈希值.更正和数据更新.
小智 9
请记住,GPU可以比CPU快50倍到100倍.它更难编程,但效率更高.有关数字,请访问www.bitcointalk.com.我知道我在Radeon HD5830上每秒可以做到6.22亿个SHA-256.