Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于这个自定义MD5比较,可以进行哪些优化?_C++_Optimization_Md5_Password Recovery - Fatal编程技术网

C++ 对于这个自定义MD5比较,可以进行哪些优化?

C++ 对于这个自定义MD5比较,可以进行哪些优化?,c++,optimization,md5,password-recovery,C++,Optimization,Md5,Password Recovery,我正在尝试优化这段代码,它接受通过命令行管道输入生成的字符串,在这些字符串上运行两轮OpenSSL库MD5(第二次运行仅使用第一次运行的部分结果),并将它们与命令行上提供的哈希进行比较 目前,它在核心i7 2.67GHz联想ThinkPad X201上以大约800000行/秒的速度运行,在10秒内完成7311616行。我真的很想看看是否有什么可以做,以改善这一点。我使用VisualStudio2012和现在的2013作为我的基础(从bash和Perl脚本演变而来) 我相信这个过程中唯一的瓶颈是比

我正在尝试优化这段代码,它接受通过命令行管道输入生成的字符串,在这些字符串上运行两轮OpenSSL库MD5(第二次运行仅使用第一次运行的部分结果),并将它们与命令行上提供的哈希进行比较

目前,它在核心i7 2.67GHz联想ThinkPad X201上以大约800000行/秒的速度运行,在10秒内完成7311616行。我真的很想看看是否有什么可以做,以改善这一点。我使用VisualStudio2012和现在的2013作为我的基础(从bash和Perl脚本演变而来)

我相信这个过程中唯一的瓶颈是比较,我已经从strcmp切换到memcmp(尽管没有看到有很大的提升)。MD5和maskprocessor的生成超出了我用自己的代码替换的能力

这段代码是我通过散列冲突恢复Stuffit5密码的项目的一部分,工作非常好,但速度的任何提高都会带来巨大的好处(尤其是在运行多个实例时)

有关该过程的图像,请访问

我决不是一个称职的程序员,我知道如果Hashcat或任何GPU加速密码破解程序能够实现这个算法,它会把我的密码从水里炸出来,但是没有足够的需求来实现它。相信我,我问:(

\define\u CRT\u SECURE\u NO\u警告
//需要链接OpenSSL库、链接头、链接DLL
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{ 
/*启动-设置计时器*/
std::时钟未启动;
双倍持续时间;
开始=标准::时钟();
/*结束设置计时器*/
/*开始-哈希长度检查*/
int j;
对于(int i=1;istd::cout您可以通过消除
sprintf
调用周围的循环来获得改进,并改用以下方法:

sprintf(&mdString3[0], 
        "%02x%02x%02x%02x%02x", 
        (unsigned char)digest[0],
        (unsigned char)digest[1], 
        (unsigned char)digest[2], 
        (unsigned char)digest[3], 
        (unsigned char)digest[4]);

@大卫拉波特你的改变使我的平均成绩从750-800k提高到900-950k。我非常感激。
sprintf(&mdString3[0], 
        "%02x%02x%02x%02x%02x", 
        (unsigned char)digest[0],
        (unsigned char)digest[1], 
        (unsigned char)digest[2], 
        (unsigned char)digest[3], 
        (unsigned char)digest[4]);