Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Нужно реализацию md5 на MS VC++ 2003 Добавлено: 13.04.07 00:37  

Автор вопроса:  ZagZag | ICQ: 295002202 

Ответить

  Ответы Всего ответов: 70  

Номер ответа: 31
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #31
Добавлено: 13.04.07 23:03
Предраспределенные таблицы занимают кучу места на диске.

Смотря каких. Не проще ли будет отдизасмить PasswordsPro, если тебе нужна хорошая скорость?

Ответить

Номер ответа: 32
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #32 Добавлено: 13.04.07 23:23
400-500 тыс. хешей в секунду меня вполне устроит. Но надо чтобы это
было на сишке.
Дизасмить PasswordsPro у меня еще IDA не доросла =) Темболее что он
еще и упакован фиг знает чем.

Вобщем проблема пока что одна: как функции из lib (на masm) передать
параметры из MS VC++

Ответить

Номер ответа: 33
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #33
Добавлено: 14.04.07 01:19
Напиши объявление этой функции и прилинкуй либ
Проверить пока не могу, но выглядеть это должно примерно так:
#pragma comment (lib, "md5.lib";)

extern "C" {
void procMD5hash(void *buff, void *hashbuff);
}

Ответить

Номер ответа: 34
Автор ответа:
 W[4Fh]LF



Вопросов: 0
Ответов: 187
 Web-сайт: hunger.ru
 Профиль | | #34
Добавлено: 14.04.07 14:32
Код, который дан на первой странице не совсем полный, он в конце не преобразует хеш в строку, он был очень хорошо оптимизирован(если кто сможет написать более быстрый вариант, хотя бы процентов на 10, может считать себя гуру оптимизации).

Надо немножко дополнить процедуру, переделав её следующим образом:

1. в asm файл следующее:


;Coded by W[4Fh]LF
;http://hunger.ru
;icq:605600
;mail: wolf__itdefence.ru
.386
.model flat,stdcall
option casemap:none


include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

include C:\masm32\macros\Strings.mac

procMD5hash proto :DWORD,:DWORD,:DWORD
.const

.data
hexnum      ;DB "0123456789abcdef",0
.data?

.code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    
    mov  eax,TRUE
    ret
DllEntry Endp

procMD5hash proc uses ebx edi esi eax edx ebx, inBuffer:dword, \
szBuffer:dword, outBuffer: dword
local   TempStr[16]:byte

;align 16
mov esi,inBuffer
mov eax,szBuffer
mov byte ptr [esi + eax],80h
mov ebx,eax
inc ebx
.while ebx<65
mov dword ptr [esi + ebx],0
add ebx,4
.endw

shl eax,3
mov word ptr [esi + 56],ax
mov word ptr [esi + 58],0
push ebp

    mov     eax,067452301h
    mov     ebx,0efcdab89h
    mov     ecx,098badcfeh
    mov     edx,010325476h
    
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     eax,[esi]
    or     edi,ebp
    add eax,edi
    add eax,0d76aa478h
    rol     eax,07h
    add     eax,ebx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     edx,[esi+4]
    or     edi,ebp
    add     edx,edi
    add edx,0e8C7b756h
    rol     edx,0ch
    add     edx,eax
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     ecx,[esi+8]
    or     edi,ebp
    add     ecx,edi
    add ecx,0242070dbh
    rol     ecx,11h
    add     ecx,edx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ebx,[esi+0ch]
    or     edi,ebp
    add     ebx,edi
    add ebx,0c1bdceeeh
    rol     ebx,16h
    add     ebx,ecx
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     eax,[esi+10h]
    or     edi,ebp
    add     eax,edi
    add eax,0f57c0fafh
    rol     eax,07h
    add     eax,ebx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     edx,[esi+14h]
    or     edi,ebp
    add     edx,edi
    add edx,04787c62ah
    rol     edx,0ch
    add     edx,eax
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     ecx,[esi+18h]
    or     edi,ebp
    add     ecx,edi
    add ecx,0a8304613h
    rol     ecx,11h
    add     ecx,edx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ebx,[esi+1ch]
    or     edi,ebp
    add     ebx,edi
    add ebx,0fd469501h
    rol     ebx,16h
    add     ebx,ecx
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     eax,[esi+20h]
    or     edi,ebp
    add     eax,edi
    add eax,0698098d8h
    rol     eax,07h
    add     eax,ebx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     edx,[esi+24h]
    or     edi,ebp
    add     edx,edi
    add edx,08b44f7afh
    rol     edx,0ch
    add     edx,eax
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     ecx,[esi+28h]
    or     edi,ebp
    add     ecx,edi
    add ecx,0ffff5bb1h
    rol     ecx,11h
    add     ecx,edx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ebx,[esi+2ch]
    or     edi,ebp
    add     ebx,edi
    add ebx,0895cd7beh
    rol     ebx,16h
    add     ebx,ecx
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     eax,[esi+30h]
    or     edi,ebp
    add     eax,edi
    add eax,06b901122h
    rol     eax,07h
    add     eax,ebx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     edx,[esi+34h]
    or     edi,ebp
    add     edx,edi
    add edx,0fd987193h
    rol     edx,0ch
    add     edx,eax
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     ecx,[esi+38h]
    or     edi,ebp
    add     ecx,edi
    add ecx,0a679438eh
    rol     ecx,11h
    add     ecx,edx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ebx,[esi+3ch]
    or     edi,ebp
    add     ebx,edi
    add ebx,049b40821h
    rol     ebx,16h
    add     ebx,ecx
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     eax,[esi+04h]
    or     edi,ebp
    add     eax,edi
    add eax,0f61e2562h
    rol     eax,05h
    add     eax,ebx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     edx,[esi+18h]
    or     edi,ebp
    add     edx,edi
    add edx,0c040b340h
    rol     edx,09h
    add     edx,eax
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ecx,[esi+2ch]
    or     edi,ebp
    add     ecx,edi
    add ecx,0265e5a51h
    rol     ecx,0eh
    add     ecx,edx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     ebx,[esi]
    or     edi,ebp
    add     ebx,edi
    add ebx,0e9b6c7aah
    rol     ebx,14h
    add     ebx,ecx
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     eax,[esi+14h]
    or     edi,ebp
    add     eax,edi
    add eax,0d62f105dh
    rol     eax,05h
    add     eax,ebx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     edx,[esi+28h]
    or     edi,ebp
    add     edx,edi
    add edx,002441453h
    rol     edx,09h
    add     edx,eax
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ecx,[esi+3ch]
    or     edi,ebp
    add     ecx,edi
    add ecx,0d8a1e681h
    rol     ecx,0eh
    add     ecx,edx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     ebx,[esi+10h]
    or     edi,ebp
    add     ebx,edi
    add ebx,0e7d3fbc8h
    rol     ebx,14h
    add     ebx,ecx
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     eax,[esi+24h]
    or     edi,ebp
    add     eax,edi
    add eax,021e1cde6h
    rol     eax,05h
    add     eax,ebx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     edx,[esi+38h]
    or     edi,ebp
    add     edx,edi
    add edx,0c33707d6h
    rol     edx,09h
    add     edx,eax
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ecx,[esi+0ch]
    or     edi,ebp
    add     ecx,edi
    add ecx,0f4d50d87h
    rol     ecx,0eh
    add     ecx,edx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     ebx,[esi+20h]
    or     edi,ebp
    add     ebx,edi
    add ebx,0455a14edh
    rol     ebx,14h
    add     ebx,ecx
    mov     ebp,edx
    mov     edi,edx
    not     ebp
    and     edi,ebx
    and     ebp,ecx
    add     eax,[esi+34h]
    or     edi,ebp
    add     eax,edi
    add eax,0a9e3e905h
    rol     eax,05h
    add     eax,ebx
    mov     ebp,ecx
    mov     edi,ecx
    not     ebp
    and     edi,eax
    and     ebp,ebx
    add     edx,[esi+08h]
    or     edi,ebp
    add     edx,edi
    add edx,0fcefa3f8h
    rol     edx,09h
    add     edx,eax
    mov     ebp,ebx
    mov     edi,ebx
    not     ebp
    and     edi,edx
    and     ebp,eax
    add     ecx,[esi+1ch]
    or     edi,ebp
    add     ecx,edi
    add ecx,0676f02d9h
    rol     ecx,0eh
    add     ecx,edx
    mov     ebp,eax
    mov     edi,eax
    not     ebp
    and     edi,ecx
    and     ebp,edx
    add     ebx,[esi+30h]
    or     edi,ebp
    add     ebx,edi
    add ebx,08d2a4c8ah
    rol     ebx,14h
    add     ebx,ecx
    mov     ebp,edx
    add     eax,[esi+14h]
    xor     ebp,ecx
    xor     ebp,ebx
    add     eax,ebp
    add eax,0fffa3942h
    rol     eax,04h
    add     eax,ebx
    mov     ebp,ecx
    add     edx,[esi+20h]
    xor     ebp,ebx
    xor     ebp,eax
    add     edx,ebp
    add edx,08771f681h
    rol     edx,0bh
    add     edx,eax
    mov     ebp,ebx
    add     ecx,[esi+2ch]
    xor     ebp,eax
    xor     ebp,edx
    add     ecx,ebp
    add ecx,06d9d6122h
    rol     ecx,10h
    add     ecx,edx
    mov     ebp,eax
    add     ebx,[esi+38h]
    xor     ebp,edx
    xor     ebp,ecx
    add     ebx,ebp
    add ebx,0fde5380ch
    rol     ebx,17h
    add     ebx,ecx
    mov     ebp,edx
    add     eax,[esi+04h]
    xor     ebp,ecx
    xor     ebp,ebx
    add     eax,ebp
    add eax,0a4beea44h
    rol     eax,04h
    add     eax,ebx
    mov     ebp,ecx
    add     edx,[esi+10h]
    xor     ebp,ebx
    xor     ebp,eax
    add     edx,ebp
    add edx,04bdecfa9h
    rol     edx,0bh
    add     edx,eax
    mov     ebp,ebx
    add     ecx,[esi+1ch]
    xor     ebp,eax
    xor     ebp,edx
    add     ecx,ebp
    add ecx,0f6bb4b60h
    rol     ecx,10h
    add     ecx,edx
    mov     ebp,eax
    add     ebx,[esi+28h]
    xor     ebp,edx
    xor     ebp,ecx
    add     ebx,ebp
    add ebx,0bebfbc70h
    rol     ebx,17h
    add     ebx,ecx
    mov     ebp,edx
    add     eax,[esi+34h]
    xor     ebp,ecx
    xor     ebp,ebx
    add     eax,ebp
    add eax,0289b7ec6h
    rol     eax,04h
    add     eax,ebx
    mov     ebp,ecx
    add     edx,[esi]
    xor     ebp,ebx
    xor     ebp,eax
    add     edx,ebp
    add edx,0eaa127fah
    rol     edx,0bh
    add     edx,eax
    mov     ebp,ebx
    add     ecx,[esi+0ch]
    xor     ebp,eax
    xor     ebp,edx
    add     ecx,ebp
    add ecx,0d4ef3085h
    rol     ecx,10h
    add     ecx,edx
    mov     ebp,eax
    add     ebx,[esi+18h]
    xor     ebp,edx
    xor     ebp,ecx
    add     ebx,ebp
    add ebx,004881d05h
    rol     ebx,17h
    add     ebx,ecx
    mov     ebp,edx
    add     eax,[esi+24h]
    xor     ebp,ecx
    xor     ebp,ebx
    add     eax,ebp
    add eax,0d9d4d039h
    rol     eax,04h
    add     eax,ebx
    mov     ebp,ecx
    add     edx,[esi+30h]
    xor     ebp,ebx
    xor     ebp,eax
    add     edx,ebp
    add edx,0e6db99e5h
    rol     edx,0bh
    add     edx,eax
    mov     ebp,ebx
    add     ecx,[esi+3ch]
    xor     ebp,eax
    xor     ebp,edx
    add     ecx,ebp
    add ecx,01fa27cf8h
    rol     ecx,10h
    add     ecx,edx
    mov     ebp,eax
    add     ebx,[esi+08h]
    xor     ebp,edx
    xor     ebp,ecx
    add     ebx,ebp
    add ebx,0c4ac5665h
    rol     ebx,17h
    add     ebx,ecx
    mov     edi,edx
    add     eax,[esi]
    not     edi
    or     edi,ebx
    xor     edi,ecx
    add     eax,edi
    add eax,0f4292244h
    rol     eax,06h
    add     eax,ebx
    mov     edi,ecx
    add     edx,[esi+1ch]
    not     edi
    or     edi,eax
    xor     edi,ebx
    add     edx,edi
    add edx,0432aff97h
    rol     edx,0ah
    add     edx,eax
    mov     edi,ebx
    add     ecx,[esi+38h]
    not     edi
    or     edi,edx
    xor     edi,eax
    add     ecx,edi
    add ecx,0ab9423a7h
    rol     ecx,0fh
    add     ecx,edx
    mov     edi,eax
    add     ebx,[esi+14h]
    not     edi
    or     edi,ecx
    xor     edi,edx
    add     ebx,edi
    add ebx,0fc93a039h
    rol     ebx,15h
    add     ebx,ecx
    mov     edi,edx
    add     eax,[esi+30h]
    not     edi
    or     edi,ebx
    xor     edi,ecx
    add     eax,edi
    add eax,0655b59c3h
    rol     eax,06h
    add     eax,ebx
    mov     edi,ecx
    add     edx,[esi+0ch]
    not     edi
    or     edi,eax
    xor     edi,ebx
    add     edx,edi
    add edx,08f0ccc92h
    rol     edx,0ah
    add     edx,eax
    mov     edi,ebx
    add     ecx,[esi+28h]
    not     edi
    or     edi,edx
    xor     edi,eax
    add     ecx,edi
    add ecx,0ffeff47dh
    rol     ecx,0fh
    add     ecx,edx
    mov     edi,eax
    add     ebx,[esi+04h]
    not     edi
    or     edi,ecx
    xor     edi,edx
    add     ebx,edi
    add ebx,085845dd1h
    rol     ebx,15h
    add     ebx,ecx
    mov     edi,edx
    add     eax,[esi+20h]
    not     edi
    or     edi,ebx
    xor     edi,ecx
    add     eax,edi
    add eax,06fa87e4fh
    rol     eax,06h
    add     eax,ebx
    mov     edi,ecx
    add     edx,[esi+3ch]
    not     edi
    or     edi,eax
    xor     edi,ebx
    add     edx,edi
    add edx,0fe2ce6e0h
    rol     edx,0ah
    add     edx,eax
    mov     edi,ebx
    add     ecx,[esi+18h]
    not     edi
    or     edi,edx
    xor     edi,eax
    add     ecx,edi
    add ecx,0a3014314h
    rol     ecx,0fh
    add     ecx,edx
    mov     edi,eax
    add     ebx,[esi+34h]
    not     edi
    or     edi,ecx
    xor     edi,edx
    add     ebx,edi
    add ebx,04e0811a1h
    rol     ebx,15h
    add     ebx,ecx
    mov     edi,edx
    add     eax,[esi+10h]
    not     edi
    or     edi,ebx
    xor     edi,ecx
    add     eax,edi
    add eax,0f7537e82h
    rol     eax,06h
    add     eax,ebx
    mov     edi,ecx
    add     edx,[esi+2ch]
    not     edi
    or     edi,eax
    xor     edi,ebx
    add     edx,edi
    add edx,0bd3af235h
    rol     edx,0ah
    add     edx,eax
    mov     edi,ebx
    add     ecx,[esi+08h]
    not     edi
    or     edi,edx
    xor     edi,eax
    add     ecx,edi
    add ecx,02ad7d2bbh
    rol     ecx,0fh
    add     ecx,edx
    mov     edi,eax
    add     ebx,[esi+24h]
    not     edi
    or     edi,ecx
    xor     edi,edx
    add     ebx,edi
    add ebx,0eb86d391h
    rol     ebx,15h
    add     ebx,ecx

pop ebp
lea esi,TempStr
    add     eax,067452301h
    mov     [esi],eax
    add     ebx,0efcdab89h
    mov     [esi+4],ebx
    add     ecx,098badcfeh
    mov     [esi+8],ecx
    add     edx,010325476h
    mov     [esi+12],edx
    
     mov ecx,16
mov edi,outBuffer
@@:
lodsb
xor ah,ah
ror ax,4
shr ah,4
movsx edx,ah
     mov ah,byte ptr [hexnum + edx]
     movsx edx,al
     mov al,byte ptr [hexnum + edx]
mov word ptr[edi],ax
add edi,2
dec ecx
jne @b
    
ret
procMD5hash endp

End DllEntry


2. в def файл:


LIBRARY Example
EXPORTS
procMD5hash


3. Компилируем так:

set cmpl=C:\masm32
%cmpl%\bin\ml /nologo /c /coff /Cp /IC:\masm32\include\ dll.asm
%cmpl%\bin\link /SUBSYSTEM:WINDOWS /LIBPATH:%cmpl%\lib /DLL /DEF:dll.def dll.obj
%cmpl%\bin\link -lib dll.obj
del *.exp
del *.obj
pause


4. Используем так:

#include <iostream>

#pragma comment (lib, "md5.lib";)

extern "C" {
void _stdcall procMD5hash(void* inBuffer,
                          unsigned int szBuffer,
          void* outBuffer);
}

using namespace std;

int main(int argc, char* argv[];)
{
char szHash[256] = {0};
    char szText[256] = {0};

cout << "Enter text for create hash: ";
cin >> szText;
procMD5hash(szText, strlen(szText), szHash);
cout << szHash;

return 0;
}

Ответить

Номер ответа: 35
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #35 Добавлено: 14.04.07 15:02
Спасибо, большое! Это - то что я искал!
Пример точно работает.

Ответить

Номер ответа: 36
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #36 Добавлено: 14.04.07 18:40
если кто сможет написать более быстрый вариант, хотя бы процентов на 10, может считать себя гуру оптимизации).
100% - это Brand )))))

Ответить

Номер ответа: 37
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #37
Добавлено: 14.04.07 19:26
Не думаю, что дотнетовская реализация будет существенно быстрее.

Ответить

Номер ответа: 38
Автор ответа:
 W[4Fh]LF



Вопросов: 0
Ответов: 187
 Web-сайт: hunger.ru
 Профиль | | #38
Добавлено: 14.04.07 19:51
Было бы интересно посоревноваться:)

Ответить

Номер ответа: 39
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #39 Добавлено: 14.04.07 20:04
Не думаю, что дотнетовская реализация будет существенно быстрее.
Более того, я думаю, что она будет медление...

Ответить

Номер ответа: 40
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #40
Добавлено: 15.04.07 02:42
Не удержался и проверил. Результат меня просто поразил, даже несмотря на то, что я и ранее не был фанатом дотнета:
Бенчмарк на словах от AAAAA до JJJJJ (100 тыс)

C# 2921 3218 3109 3390 3062
PHP 577 580 582 584 577
С++ 90 86 84 89 86
asm 50 51 54 51 50

На C++ была взята реализация из стандарта, на ассемблере - реализация от BUG(O)R. На этой же машине скорость генераций хэшей PasswordPro 2.3 млн. хэшей в секунду. Разумеется, везде (кроме PHP) была использована конфигурация Release, запуск из командной строки.

Попробуйте найти, где я написал фигню, которая может оправдать ШЕСТИДЕСЯТИКРАТНЫЙ проигрыш в скорости:

using System;
using System.Collections.Generic;
using System.Text;

namespace md5bench
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Security.Cryptography.MD5CryptoServiceProvider md5 =
                new System.Security.Cryptography.MD5CryptoServiceProvider();
            System.DateTime dt;

            byte from = (byte)'A', to = (byte)'J';
            byte[] s = {0,0,0,0,0};
            Int32 sum = 0;

            dt = System.DateTime.Now;

            for (byte c0 = from; c0 <= to; c0++)
            {
                s[0] = c0;
                for (byte c1 = from; c1 <= to; c1++)
                {
                    s[1] = c1;
                    for (byte c2 = from; c2 <= to; c2++)
                    {
                        s[2] = c2;
                        for (byte c3 = from; c3 <= to; c3++)
                        {
                            s[3] = c3;
                            for (byte c4 = from; c4 <= to; c4++)
                            {
                                s[4] = c4;
                                sum += md5.ComputeHash(s)[7];
                            }
                        }
                    }
                }
            }

            System.TimeSpan ts = System.DateTime.Now.Subtract(dt);

            Console.Write(";Done, control = {0}; time = {1} ms", sum, ts.TotalMilliseconds);
        }
    }
}

Ответить

Номер ответа: 41
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #41
Добавлено: 15.04.07 02:52
Потрясающе, сделал строку константной, время почти не изменилось!

            System.DateTime dt;
            dt = System.DateTime.Now;
            
            for (int i = 0; i < 100000; i++)
            {
                s += md5.ComputeHash(b)[7];
            }

            System.TimeSpan ts = System.DateTime.Now.Subtract(dt);

Кажется, миф о быстродействии дотнета и его недобиблы FCL развеян окончательно :)

Ответить

Номер ответа: 42
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #42
Добавлено: 15.04.07 03:10
Предположил, что такое время связано с какими-нибудь длительными действиями, осуществляемыми при запуске программы и не заканчивающимися с началом бенчмарка. Для проверки увеличил число итераций цикла до 10 миллионов (в 100 раз). Время увеличилось линейно, что доказывает связь числа вызовов процедуры с временем: 304609 мсек

Ответить

Номер ответа: 43
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #43
Добавлено: 15.04.07 03:29
Замерил время расчета 10 миллионов хэшей и занимаемую программой память:
10 000 000 итераций
C# 304609 мсек 4784 КБ физ., 7260 КБ вирт.
PHP 48708 мсек 6164 КБ физ., 5280 КБ вирт.
C++   8246 мсек 1304 КБ физ., 360 КБ вирт.
asm   4747 мсек 1300 КБ физ., 360 КБ вирт.

Следует учесть, что в случае PHP замерялась память, занимаемая всем интерпретатором целиком.

Итак, скорость расчета (хэшей в секунду):
C# 32.8 тыс - смешно и говорить
PHP 205 тыс. - чисто интерпретируемый язык обогнал компилируемый почти в 7 раз.
C++ 1.21 млн. - стандартная реализация с вызовом MDInit, MDUpdate и MDFinal
asm 2.11 млн. - хорошая реализация от BUG(O)R aka W[4Fh]LF, вызывается из программы на C++
PasswordsPro 2.51 млн. - по праву считается лучшей

Ответить

Номер ответа: 44
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #44 Добавлено: 15.04.07 05:05
успокойся, Brand'у это ненадо, он занят зарабатыванием денег, он читает эту тему но врядли отпостит сюда :)

Ответить

Номер ответа: 45
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #45 Добавлено: 15.04.07 05:31
На вб6 ~ 33 мсек
класс md5 by Robert Hubley (c)

Но там алгоритм не на скорость, а скорее на понятность, при генирации хеша там сколько сдвигов столько раз и вызываются функции, а внутри них ещё вызываются какие-то вспомогательные... Наверное основаная часть времени именно на вызов функций идёт. Если переписать для скорости дотнет будет вообще в пыли :))

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам