我對C++(實際上是兩天)頗爲陌生,我想知道是否可以使用此代碼進行一些並行化。由於有數百萬次的迭代,我需要更快的速度。從我迄今爲止所瞭解的內容來看,它是不可能並行化的,因爲我使用的唯一for循環取決於之前的迭代,這不允許並行化。對?如果並行化不可行,那麼如何進行優化,否則就會變得更快。我感到非常驚訝,因爲這隻比我的原始python代碼快3倍。 (有人說C++是高達100至400倍的速度比蟒蛇)C++中的GPU加速遞歸函數
如果需要的VisualStudio 2015年項目文件,請告訴我..
如果你運行應用程序: 您需要輸入一個SHA1哈希然後告訴PROGRAMM基數詞多少個字了,所以例如單詞測試: 哈希:a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 長度:4
感謝諮詢
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <iostream>
#include <cstring>
#include "..\crytoPP\sha.h"
#include "..\crytoPP\filters.h"
#include "..\crytoPP\hex.h"
#include "..\crytoPP\channels.h"
using namespace CryptoPP;
using namespace std;
int found = 0;
int iteration = 0;
int length;
char source[] = "abcdefghijklmnopqrstuvwxyz";
string solution = " didn't match";
string base_hash;
string CHECK(string hash, int argc, char** argv);
void COMBINATIONS(string b, int length, int source_length, int argc, char** argv);
int main(int argc, char** argv)
{
char *arr_ptr = &source[0];
int source_length = strlen(arr_ptr);
cout << "Please enter hash:";
cin >> base_hash;
cout << "Please enter length:";
cin >> length;
transform(base_hash.begin(), base_hash.end(), base_hash.begin(), ::toupper);
COMBINATIONS("", ::length, source_length, argc - 1, argv + 1);
system("PAUSE");
return 0;
}
string CHECK(string hash, int argc, char** argv) {
if (::found == 0) {
iteration++;
cout << iteration << endl;
if (argc == 2 && argv[1] != NULL)
hash = string(argv[1]);
string s1;
SHA1 sha1; SHA224 sha224; SHA256 sha256; SHA512 sha512;
HashFilter f1(sha1, new HexEncoder(new StringSink(s1)));
ChannelSwitch cs;
cs.AddDefaultRoute(f1);
StringSource ss(hash, true /*pumpAll*/, new Redirector(cs));
cout << s1 << endl;
if (s1 == ::base_hash) {
::found = 1;
cout << " =" << hash << endl;
}
return s1;
}
}
void COMBINATIONS(string b, int length, int source_length, int argc, char** argv) {
if (::found == 0) {
if (length == 0) {
CHECK(b, argc, argv);
}
else {
for (int i = 0; i < source_length; i++) {
COMBINATIONS(b + ::source[i], length -1, source_length, argc -1, argv + 1);
CHECK(b, argc - 1, argv + 1);
}
}
}
}
您將需要並行散列函數,這是_tough_甚至不可能。你想要做一些哈希蠻力嗎? – ForceBru
由於您對該語言不熟悉,因此請指出,使用全部大寫字母是不正確的形式,並且通常保留給宏。這只是一個約定,但幾乎所有的C++代碼都使用這個約定。 – johnbakers
不,我沒有試圖破解任何嚴肅..這個想法來了,當與朋友寫作,他挑戰我要破解一個小散列,因爲我是一個完美主義者,我希望這個工作,即使是大字。 D ..非常感謝你的提示,非常感謝! – 3Descape