ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

07.10.2007, 23:31
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
inv, надеюсь я правильно тебя понял.
Код:
#include <windows.h>
unsigned long rs_randseed;
void _srand()
{
rs_randseed = GetTickCount();
}
unsigned long _rand()
{
rs_randseed++;
return (rs_randseed*0xF02CE551) + 0x7FF2742B;
}
unsigned int __stdcall Base(PVOID pArg)
{
int a = 0;
char pa[12];
_srand();
a=_rand() % 1000;
itoa(a, pa, 10);
MessageBox(0, pa, "Hi", 0);
return 0;
}
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HANDLE hHan[9];
for(int i; i<9; i++)
{
hHan[i] = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Base, 0, 0, 0);
}
WaitForMultipleObjects(9, hHan, TRUE, INFINITE);
for(int j; j<9; j++)
{
CloseHandle(hHan[j]);
}
return 0;
}
Последний раз редактировалось Ni0x; 07.10.2007 в 23:39..
|
|
|

08.10.2007, 01:33
|
|
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме: 951141
Репутация:
291
|
|
#include <windows.h>
#include <stdio.h>
unsigned long rs_randseed;
void _srand()
{
rs_randseed = GetTickCount();
}
unsigned long _rand()
{
rs_randseed++;
return (rs_randseed*0xF02CE551) + 0x7FF2742B;
}
unsigned int __stdcall Base(PVOID pArg)
{
int a = 0;
char pa[12];
_srand();
a=_rand() % 1000;
itoa(a, pa, 10);
printf("<%s>\n",pa);
return 0;
}
int main()
{
HANDLE hHan[9];
for(int i=0; i<9; i++)
{
hHan[i] = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Base, 0, 0, 0);
}
WaitForMultipleObjects(9, hHan, TRUE, INFINITE);
for(int j=0; j<9; j++)
{
CloseHandle(hHan[j]);
}
return 0;
}
одинаковые числа=\с мессаджами не одинаковые само собой так как там время тратится на окошки
смысл не в этом...смысл во времени
может использовать другую псевдослучайную посл...
*********
проблему решил,использовал псевдо случпоследовательность(не зависит от времени) ,иницилизировал временем.
Последний раз редактировалось inv; 08.10.2007 в 05:54..
|
|
|

08.10.2007, 07:01
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
Алгоритм такой должен быть - rand_init() просто сохраняет в переменной значение GetTickCount(), а далее каждый раз, вызваная rand()-ф-ия искривляет его, например, умножает на 0xf25a0cb2 и т.п. и возвращает. Тогда значения будут разными. А у тебя зачем-то на единицу увеличивается, а потом от нее считается. Можно было бы додуматься. И ещё, не юзайте там лишнего всяких умножений, а то потом rand()-ф-ии будут занимать времени больше, чем все потоки вместе взятые
О чем тут ещё можно говорить?
|
|
|

08.10.2007, 07:15
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме: 165671
Репутация:
215
|
|
Много всяких случайностей еще можно придумать кроме времени для инициализации: состояние памяти в каком-нибудь месте, уровень входного звукового сигнала, загруженность процессора, количество занятой оперативной памяти и т.д. Можно это все как-то комбинировать и получить генератор больменее случайных чисел без всяких железяк. Только тогда надо будет не инкрементить rand_seed (или умножать его на что-то там и т.д.), а так же его постоянно откуда-то рандомно получать. Хотя функция тогда будет занимать много времени...
Great: Ммда ))) ZaCo, +1
Последний раз редактировалось _Great_; 12.10.2007 в 00:42..
|
|
|

08.10.2007, 10:58
|
|
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме: 1089794
Репутация:
134
|
|
|
|
|

08.10.2007, 14:27
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
Kez, алгоритм не мой, я просто разместил объяву. Согласен - нетемовый, исправим.
|
|
|

12.10.2007, 00:09
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
я же написал в первом посте этой теме - главное это ЧТО в СВОЕЙ программе ВЫ считаете случайным числом. не понимаю, зачем нужно формирование "случайной" последовательности наиболее близкой к жизненной, человеку, скорее всего, не занимающимся созданием ключей для шифрования? и то - взять тот же стеганос, он сам просит пользователя рандомно повозить мышкой по экрану или постучать по клавиатуре 
для игр - существуют алгоритмические способы формирования таких последовательностей с равномерным распределением значений по множеству int чисел, все это описано у кнута.
--
куда интереснее было бы почитать про анализ алгоритмически-построенной последовательности на "случайность" и про возможное предположение о продолжении последовательности.
|
|
|

12.10.2007, 17:28
|
|
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме: 165671
Репутация:
215
|
|
Псевдослучайное число это значит число, которое на самом деле не случайное и при знании алгоритма функции rand и начальных условий можно восстановить всю цепочку вызовов этой функции, а если знать как окргуляли эти числа, то случайными они уже никак не будут.
А случайные числа это те, у которых практически невозможно предсказать начальные условия (в худшем случае) или те, у которых вообще нет начальных условий (т.е. с учетом состояния рандомизирующих элементов генерируется всякое случайное число), разумеется в большинстве случаев это совершенно ненужно, я даже плохо представляю когда это может понадобиться.
|
|
|

12.07.2007, 20:02
|
|
Участник форума
Регистрация: 11.07.2007
Сообщений: 190
Провел на форуме: 254313
Репутация:
185
|
|
Сообщение от Ni0x
Lamia, я не говорю что на asm генератор будет хуже, я своим высказыванием имел ввиду, что написать генератор случайных чисел очень сложно на любом языке, даже более того, почти невозможно.
А я и не спорю!Именно случайных....
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|