现代计算机可以计算多少个SHA256哈希值?

17

我想了解基于不同字符集的哈希破解所需的数学时间。

例如,仅使用7个字母的美国标准信息交换码字符集,我们知道可能有267种序列可以使用。如果知道计算机每分钟可以生成多少个序列,就可以大致了解生成所有可能的哈希和破解某个7字符哈希所需的时间(不考虑生日攻击)。

例如,以上述数字为例,如果现代四核处理器每分钟可以生成100万个哈希值,则在该范围内找到所有可能的哈希值需要 8031810176 / 1000000 / 60 = 133.86 小时。

此外,新的 Sandy Bridge 英特尔芯片与本地 AES 的关系如何?

2个回答

14

我使用 OpenSSL SHA256 实现写了这个 C 语言测试。

#include <stdio.h>
#include <string.h>
#include "openssl/sha.h"

// https://dev59.com/xFPTa4cB1Zd3GeqPk50v#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);
}

编译:

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上的单线程应用程序中完成的,并且不包括将哈希写入文件。

编辑

糟糕,我正在计算所有字符长度及以下字符串的哈希值。已更正并更新数据。


所以-开启4个程序,您可以生成大约400k的哈希/秒。 - nos
我之前生成的字符串是错误的,但现在已经没问题了。而且显然在某次运行中我运气不错(注意,这是一台电脑,还有很多其他的东西也在运行)。 - orlp
谢谢,我碰巧有Q8200,所以这对我非常适用。我想知道新的Sandy Bridge CPU能有多快。 - Xeoncross
你选择的数字(26)只包含小写英文字母。如果包含大小写字母和数字,将有62^7种可能性。如果包含所有可打印ASCII字符,则有95^7种可能性。SHA256和其他类似哈希算法最好使用GPU进行破解。 - 01100110
@user1200129:我遵循了问题的要求:“例如,仅使用7个字母的美国ASCII字母字符,我们知道可能有267个可能的序列可用。”。 - orlp

10

记住,GPU的哈希速度比CPU快50倍至100倍。虽然编程难度较大,但效率更高。请参考www.bitcointalk.com上的数据。我知道我在Radeon HD5830上每秒执行6.22亿个SHA-256哈希。


1
如果你要做某件事,就要做好它。- GPU - Xeoncross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接