Hash 现代计算机能计算多少个SHA256哈希?
我想知道破解基于不同字符集的散列所需的数学时间 例如,仅使用7个字母的US-ASCII字母字符,我们就知道可以使用267个可能的序列。知道一台计算机每分钟能生成多少个哈希值,我就能知道生成所有可能的哈希值和破解某个7个字符的哈希值(生日攻击除外)需要多长时间 例如,以上面的数字为例,如果一个现代四核每分钟可以生成100万个哈希值,则需要Hash 现代计算机能计算多少个SHA256哈希?,hash,cpu,sha2,Hash,Cpu,Sha2,我想知道破解基于不同字符集的散列所需的数学时间 例如,仅使用7个字母的US-ASCII字母字符,我们就知道可以使用267个可能的序列。知道一台计算机每分钟能生成多少个哈希值,我就能知道生成所有可能的哈希值和破解某个7个字符的哈希值(生日攻击除外)需要多长时间 例如,以上面的数字为例,如果一个现代四核每分钟可以生成100万个哈希值,则需要8031810176/1000000/60=133.86小时才能找到该范围内所有可能的哈希值 另外,带有本机AES的新Sandy Bridge Intel芯片如何
8031810176/1000000/60=133.86
小时才能找到该范围内所有可能的哈希值
另外,带有本机AES的新Sandy Bridge Intel芯片如何发挥作用?我使用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);
}
结果(我知道,我对计算机名不是很有创意):
这就是11881376/182.4=65139
hash每秒。然后计算所有哈希值需要26^7/101821/3600=34小时。请注意,所有这些都是在单线程应用程序的Q6600四核CPU上完成的,不包括将哈希写入文件
编辑
Woops,我正在计算所有N个字符及其以下的字符串的哈希值。更正并更新数据。请记住,GPU的散列速度比CPU快50-100倍。编程更难,但效率更高。有关数字,请访问www.bitcontalk.com。我知道我在Radeon HD5830上每秒执行6.22亿个SHA-256。所以-启动4个程序,您可以每秒生成大约40万个哈希。我生成了错误的字符串,但现在一切正常。很明显,我在一次跑步中也很幸运(注意,这是一台PC,其他很多东西也在运行)。谢谢,我碰巧有Q8200,所以这非常适合我自己。我想知道新的Sandy Bridge CPU的运行速度有多快。您选择的数字(26)只是小写英文字母。上限、下限和下限数字应为62^7。所有可打印的ASCII码都是95^7。SHA256和其他类似的散列最好由GPU破解。@user1200129:我遵循了问题的要求:例如,仅使用7个字母的US-ASCII字母字符,我们知道可以使用267个可能的序列。
“如果要做某事,请做好”-GPU
gcc -lcrypto -O3 -o test test.c
nightcracker@nightcracker-pc:~/c/sha256$ time ./test
11881376
real 3m2.431s
user 3m2.335s
sys 0m0.008s