Сообщение от
Xserg
Зы но 9 лет вместо 10 почти не радует

.
Подумалось, нельзя ли еще побыстрее? Оказалось можно.
Необходимые компоненты:
[+] Microsoft Visual Studio 2005 или старше (в смысле поновее)
[+] CUDA for Windows
Тут
[-] Видеокарта Nvidia GeForce8800 Ultra … [+]GeForce8500GT (1.8т.руб) в десять раз медленнее
[+] немного мозгов , для написания программы
Вот так не сложно запускается 128 потоков одновременно
Код:
unsigned int * data;
cudaMalloc((void**)&data, sizeof(hdata));
cudaMemcpy(data, hdata, sizeof(hdata), cudaMemcpyHostToDevice);
md5<<<16,8>>>(data);//16-мультипроцуссоров * 8 шейдеров =128 threads
cudaMemcpy(hdata, data, sizeof(hdata), cudaMemcpyDeviceToHost);
Так пишется программа для синхронного выполнения 128 шейдерными процессорами.
Код:
__global__ void md5(unsigned int * data)
{
unsigned int Pdata[16];
for (int i=0;i<16;i++) Pdata[i]=data[(blockIdx.x*16 + threadIdx.x*8) +i];
__syncthreads();
unsigned int a=0x67452301;
unsigned int b=0xefcdab89;
unsigned int c=0x98badcfe;
unsigned int d=0x10325476;
a= a + (d ^ (b & (c ^ d))) + Pdata[ 0] + 0xd76aa478; a=(a<< 7)|(a>>(32- 7)); a= b + a;
d= d + (c ^ (a & (b ^ c))) + Pdata[ 1] + 0xe8c7b756; d=(d<<12)|(d>>(32-12)); d= a + d;
c= c + (b ^ (d & (a ^ b))) + Pdata[ 2] + 0x242070db; c=(c<<17)|(c>>(32-17)); c= d + c;
b= b + (a ^ (c & (d ^ a))) + Pdata[ 3] + 0xc1bdceee; b=(b<<22)|(b>>(32-22)); b= c + b;
// и т.д.
Совсем не сложно

.
Получаем перебор 320 000 000 паролей в секунду.
Зы 2 месяца вместо 9 лет уже радует.
