Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

RND funkcija - zasto je uvejk isti niz...

[es] :: C/C++ programiranje :: RND funkcija - zasto je uvejk isti niz...

Strane: 1 2

[ Pregleda: 8078 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.77.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: RND funkcija - zasto je uvejk isti niz...17.11.2004. u 11:53 - pre 237 meseci
Posto se radi o Windows-ima, onda moze pokusati nesto ovako:
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;
}


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.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: C/C++ programiranje :: RND funkcija - zasto je uvejk isti niz...

Strane: 1 2

[ Pregleda: 8078 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.