Code:
...
#include "sha.h"
...
char *GetRnd()
{
SHA_INFO sha;
FILETIME created, exited, kernel, user;
LONG val;
POINT point;
MEMORYSTATUS memoryStatus;
unsigned long tmp;
char *result ;
sha_init(&sha);
time_t now = time(NULL);
sha_update(&sha, (SHA_BYTE *)&now, sizeof(now));
tmp = (unsigned long)GetCurrentProcessId();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
tmp = (unsigned long)GetCurrentThreadId();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
/* Pored GetTickCount mozes upotrebiti
GetCapture, GetClipboardOwner, GetClipboardViewer, GetDesktopWindow, GetFocus,
GetInputState,GetMessagePos, GetMessageTime, GetOpenClipboardWindow,
GetProcessHeap,GetProcessWindowStation, GetActiveWindow
*/
tmp = (unsigned long) GetTickCount();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
GetCaretPos(&point);
sha_update(&sha, (SHA_BYTE *)&point, sizeof(point));
GetCursorPos( &point );
sha_update(&sha, (SHA_BYTE *)&point, sizeof(point));
GetProcessTimes(GetCurrentProcess(),
&created, &exited, &kernel, &user);
sha_update(&sha, (SHA_BYTE *)&created, sizeof(created));
sha_update(&sha, (SHA_BYTE *)&exited, sizeof(exited));
sha_update(&sha, (SHA_BYTE *)&kernel, sizeof(kernel));
sha_update(&sha, (SHA_BYTE *)&user, sizeof(user));
memoryStatus.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
sha_update(&sha, (SHA_BYTE *)&memoryStatus, sizeof(memoryStatus));
sha_final(&sha);
result = (char *)malloc(41); // SHA hash je 40 bajta + 1 za NUL termination
sprintf(result, "%08lx%08lx%08lx%08lx%08lx",
(unsigned long)sha.digest[0], (unsigned long)sha.digest[1],
(unsigned long)sha.digest[2], (unsigned long)sha.digest[3],
(unsigned long)sha.digest[4]);
return result;
}
...
#include "sha.h"
...
char *GetRnd()
{
SHA_INFO sha;
FILETIME created, exited, kernel, user;
LONG val;
POINT point;
MEMORYSTATUS memoryStatus;
unsigned long tmp;
char *result ;
sha_init(&sha);
time_t now = time(NULL);
sha_update(&sha, (SHA_BYTE *)&now, sizeof(now));
tmp = (unsigned long)GetCurrentProcessId();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
tmp = (unsigned long)GetCurrentThreadId();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
/* Pored GetTickCount mozes upotrebiti
GetCapture, GetClipboardOwner, GetClipboardViewer, GetDesktopWindow, GetFocus,
GetInputState,GetMessagePos, GetMessageTime, GetOpenClipboardWindow,
GetProcessHeap,GetProcessWindowStation, GetActiveWindow
*/
tmp = (unsigned long) GetTickCount();
sha_update(&sha, (SHA_BYTE *)&tmp, sizeof(tmp));
GetCaretPos(&point);
sha_update(&sha, (SHA_BYTE *)&point, sizeof(point));
GetCursorPos( &point );
sha_update(&sha, (SHA_BYTE *)&point, sizeof(point));
GetProcessTimes(GetCurrentProcess(),
&created, &exited, &kernel, &user);
sha_update(&sha, (SHA_BYTE *)&created, sizeof(created));
sha_update(&sha, (SHA_BYTE *)&exited, sizeof(exited));
sha_update(&sha, (SHA_BYTE *)&kernel, sizeof(kernel));
sha_update(&sha, (SHA_BYTE *)&user, sizeof(user));
memoryStatus.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
sha_update(&sha, (SHA_BYTE *)&memoryStatus, sizeof(memoryStatus));
sha_final(&sha);
result = (char *)malloc(41); // SHA hash je 40 bajta + 1 za NUL termination
sprintf(result, "%08lx%08lx%08lx%08lx%08lx",
(unsigned long)sha.digest[0], (unsigned long)sha.digest[1],
(unsigned long)sha.digest[2], (unsigned long)sha.digest[3],
(unsigned long)sha.digest[4]);
return result;
}
E sada, posto tebi treba unsigned long za srand, onda samo XOR-uj sve bajte iz rezultata funkcije.
Imas sha kako attachment uz poruke :)
People who think they know everything tend to irritate those of us who do.