C++ 对于这个自定义MD5比较,可以进行哪些优化?
我正在尝试优化这段代码,它接受通过命令行管道输入生成的字符串,在这些字符串上运行两轮OpenSSL库MD5(第二次运行仅使用第一次运行的部分结果),并将它们与命令行上提供的哈希进行比较 目前,它在核心i7 2.67GHz联想ThinkPad X201上以大约800000行/秒的速度运行,在10秒内完成7311616行。我真的很想看看是否有什么可以做,以改善这一点。我使用VisualStudio2012和现在的2013作为我的基础(从bash和Perl脚本演变而来) 我相信这个过程中唯一的瓶颈是比较,我已经从strcmp切换到memcmp(尽管没有看到有很大的提升)。MD5和maskprocessor的生成超出了我用自己的代码替换的能力 这段代码是我通过散列冲突恢复Stuffit5密码的项目的一部分,工作非常好,但速度的任何提高都会带来巨大的好处(尤其是在运行多个实例时) 有关该过程的图像,请访问 我决不是一个称职的程序员,我知道如果Hashcat或任何GPU加速密码破解程序能够实现这个算法,它会把我的密码从水里炸出来,但是没有足够的需求来实现它。相信我,我问:(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脚本演变而来) 我相信这个过程中唯一的瓶颈是比
\define\u CRT\u SECURE\u NO\u警告
//需要链接OpenSSL库、链接头、链接DLL
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
/*启动-设置计时器*/
std::时钟未启动;
双倍持续时间;
开始=标准::时钟();
/*结束设置计时器*/
/*开始-哈希长度检查*/
int j;
对于(int i=1;i std::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]);