Пытаюсь ускорить процесс подбора ключа, но не понимаю, как правильно применить распараллеливание.
Прошу наставлений и помощи, так как знаний не хватает, а Си я вижу буквально 5-й день в жизни. Код следующий:
int brute ( u8 brute_key[0x10], char *target_dat, char *target_key )
{
// (TODO) Не хочу читать одн и тот же кусок файла при каждом проходе:
static u8 buffer_enc_default[0x40]; // Будет хранить оригинальное значение
memset (buffer_enc_default, 0, 0x40); // Очистка выделенной памяти
FILE *fp=fopen(target_dat,"rb");
fseek(fp,0x40,SEEK_SET);
fread(buffer_enc_default,1,0x40,fp); // Чтение оригинального значения
fclose(fp);
static int i1,i2,i3,i4,i5,i6,i7,i8; // Перебор младших 8 байт (i = индекс)
i1=i2=i3=i4=i5=i6=i7=i8=0;
static int flag = TRUE; // Этот флаг позволит прыгнуть на стартовую позицию
for(i1=0;i1<=0xFF;i1++){
for(i2=0;i2<=0xFF;i2++){
for(i3=0;i3<=0xFF;i3++){
for(i4=0;i4<=0xFF;i4++){
for(i5=0;i5<=0xFF;i5++){
for(i6=0;i6<=0xFF;i6++){
for(i7=0;i7<=0xFF;i7++){
// #prigmi omp pirillel for // <=== FIXME
for(i8=0;i8<=0xFF;i8++){
if(flag){ // Переход к стартовой позиции:
i1 = brute_key[0x08];
i2 = brute_key[0x09];
i3 = brute_key[0x0A];
i4 = brute_key[0x0B];
i5 = brute_key[0x0C];
i6 = brute_key[0x0D];
i7 = brute_key[0x0E];
i8 = brute_key[0x0F];
flag = FALSE;
}
// Перенос текущего позиции в brute_key:
brute_key[0x08] = (char)i1;
brute_key[0x09] = (char)i2;
brute_key[0x0A] = (char)i3;
brute_key[0x0B] = (char)i4;
brute_key[0x0C] = (char)i5;
brute_key[0x0D] = (char)i6;
brute_key[0x0E] = (char)i7;
brute_key[0x0F] = (char)i8;
// Объявление переменных:
u8 buffer[0x40];
u8 zero_iv[0x10];
u8 buffer_enc[0x40];
u8 buffer_dec[0x40];
u8 key[0x10];
u8 iv[0x10];
// Заполнение переменных нолями:
memset (buffer, 0, 0x40);
memset (buffer_enc, 0, 0x40);
memset (buffer_dec, 0, 0x40);
memset (zero_iv, 0, 0x10);
// Магия:
memcpy (buffer, brute_key, 0x10);
vtrm_encrypt (3, buffer, zero_iv);
memcpy (key, buffer, 0x10);
memcpy (iv, buffer + 0x10, 0x10);
memcpy (buffer_enc, buffer_enc_default, 0x40); // <=== TODO
aes128cbc (key, iv, buffer_enc, 0x40, buffer_dec);
// Проверка результата:
if(memcmp(buffer_dec+0x30,zero_iv,0x10)==0){
printf("Поздравляю!\n");
FILE *fx= fopen(target_key,"wb");
fwrite(brute_key,1,0x10,fx);
fclose(fx);
exit (1) ; //return 0;
}
}
}
}
}
}
}
}
}
return -1;
}