C crypt_r真的比crypt慢32倍?

时间:2014-08-16 21:37:30

标签: c multithreading performance des crypt

我正在进行descrypt bruteforcer的概念验证,并且单线程版本在大约190k哈希/ s下运行良好,单核i-7 860 cpu。

我现在正在尝试制作这个程序的多线程版本(我第一次玩线程,所以我希望我在这里做错了。)

我首先尝试直接使用crypt,这很快但导致了错误的哈希值,因为线程正在对密码函数提出质疑。

在函数上使用互斥锁和解锁帮助,但这会将程序的速度降低到比单线程版本高几个百分点。

然后我设法谷歌了crypt_r,这被宣传为线程安全。 修改了单线程版本以使用crypt_r(使用单线程) 使用它而不是crypt的多线程版本,当使用两个核心,利用率达到99.9%时,单线程版本的性能下降到大约3.6k h / s,多线程版本大约为7.7k h / s。

所以问题是,这应该慢吗?

1 个答案:

答案 0 :(得分:0)

问题是,我在执行crypt_r函数时调用的函数还包含初始化它所需的结构的代码。

解决方案是将初始化移出完成散列时调用的函数。

简化示例不正确方式:

for (int i = 0; i < 200000; i++)
{
    struct crypt_data data;
    data.initialized = 0;

    char* hash = crypt_r("password", "sa", &data);
    printf("%i %s", i, hash);
}

正确的方法:

struct crypt_data data;
data.initialized = 0;

for (int i = 0; i < 200000; i++)
{
    char* hash = crypt_r("password", "sa", &data);
    printf("%i %s", i, hash);
}
相关问题