Что нового

Генератор НЕслучайных чисел

StarEdik

Новичок
Сообщения
365
Репутация
4
Версия AutoIt: 3.3.6.1

Описание:
Привет .
Как из даты в формате dd mm yyyy hh: nn получит последовательность уникальных чисел а из них нечитабельную фразу.За ранее благодарю.

НАПРИМЕР
12.03.2010 09 : 45 -> 12221159212031991721 -> -> AUTOITSCRIPT
12.03.2010 09 : 46 -> 98547654213657854256 -> -> WRFYBJUERRBJ
12.03.2010 09 : 47 -> 44587796111025489472 -> -> JHYYTHGDRE:rofl:

Примечания:
Каждую минуту эти числа и фразы должны меняться

 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Re: Генератор НЕ случайных чисел

Для получения одно и того же времени на обоих машинах придется брать время с интернета.
Генерация строк построена просто:
Код:
#include <String.au3>
; локальное время
$sTime = StringFormat('%02d.%02d.%04d %02d:%02d', @MDAY, @MON, @YEAR, @HOUR, @MIN)
ConsoleWrite($sTime & @CRLF)

; московское время с сайта
$sHTML = BinaryToString(InetRead('http://bilet.pp.ru/calculator_rus/tochnoe_moskovskoe_vremia.php', 1))
$aTime = StringRegExp($sHTML, '(?si)(\d{2}):(\d{2}).*?(\d{2})-(\d{2})-(\d{4})', 3)
If IsArray($aTime) Then
	$sTime = StringFormat('%02d.%02d.%04d %02d:%02d', $aTime[2], $aTime[3], $aTime[4], $aTime[0], $aTime[1])
	ConsoleWrite($sTime & @CRLF)
Else
	MsgBox(0, 'Error', 'Не удалось получить точное время с сайта')
EndIf

$sGenerate = _StringEncrypt(1, $sTime, 'long_password') ; генерируем строку за счет криптования
ConsoleWrite($sGenerate & @CRLF)
$sResult = ''
For $i = 1 To StringLen($sGenerate) Step 4 ; оставляем от полученной строки только каждый четвертый символ
	$sResult &= StringMid($sGenerate, $i, 1)
Next
ConsoleWrite($sResult & @CRLF)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Генератор НЕ случайных чисел

StarEdik [?]
Эти фразы на 2 х разных компах должны быть одинаковыми.
а даты откуда берутся? если системные, то окно в коротом эти "фразы" совпадут составляет всего 1 секунду, если же какие-то фиксированные даты, типа время создания файла и прочее, тогда другое дело.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Re: Генератор НЕ случайных чисел

Redline
Спасибо.Хороший пример.Но почему та оно выдает одно и тоже D87595D273EB145C на минуты не реагирует.Только крайнее меняются.Вот

30.08.2011 16:56
D4D78EC070A85B81908A5477DC8B2A8075CC3B44E27AB99315C048315E23C8E1
D87595D273EB145C

30.08.2011 16:59
D4D78EC070A85B81908A5477DC8B2A8075CC3B44E27AB99315C048315E23C8EE
D87595D273EB145C

Может с конца взять ? Только не каждый 4 ый а лучше рандом или как то по другому а то почти можно догадаться

Kaster
а даты откуда берутся? если системные
Да системные. А может быть произволными
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Генератор НЕ случайных чисел

StarEdik [?]
по идее должно одно и тоже получится на обоих машинах.
я и говорю, чтобы понять что они одинаковые, ты должен успеть за 1 секунду запустить свой скрипт на обоих машинах. Какой в этом смысл? Вероятность такого события достаточно мало, по моему мнению.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Re: Генератор НЕ случайных чисел

Kaster
Какой в этом смысл?
Нужно чтоб при нажатии на Hotkey с компа фиксировалось дата и время в формате dd mm yyyy hh: nn и эту Дату и время перевести в числовой формат с 10 числами после запятой.Отбросить целое а остаток умножит на 10000000000 , шифровать и всё.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: Генератор НЕ случайных чисел

StarEdik
ааа. тогда понятно. тогда это все же не системное время, а произвольное.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
StarEdik [?]
Может с конца взять ? Только не каждый 4 ый а лучше рандом или как то по другому а то почти можно догадаться
Рандомно перемешать строку не получится - на разных машинах будет разный результат.
Сделал составление строки с хвоста и перемешал четные-нечетные позиции.
Это шаблон, если не устроит - делай по аналогии.
Код:
#include <String.au3>
; локальное время
$sTime = StringFormat('%02d.%02d.%04d %02d:%02d', @MDAY, @MON, @YEAR, @HOUR, @MIN)
ConsoleWrite($sTime & @CRLF)

; московское время с сайта
$sHTML = BinaryToString(InetRead('http://bilet.pp.ru/calculator_rus/tochnoe_moskovskoe_vremia.php', 1))
$aTime = StringRegExp($sHTML, '(?si)(\d{2}):(\d{2}).*?(\d{2})-(\d{2})-(\d{4})', 3)
If IsArray($aTime) Then
	$sTime = StringFormat('%02d.%02d.%04d %02d:%02d', $aTime[2], $aTime[3], $aTime[4], $aTime[0], $aTime[1])
	ConsoleWrite($sTime & @CRLF)
Else
	MsgBox(0, 'Error', 'Не удалось получить точное время с сайта')
EndIf

$sGenerate = _StringEncrypt(1, $sTime, 'long_password') ; генерируем строку за счет криптования
ConsoleWrite($sGenerate & @CRLF)
$sResult = ''
; обход строки с конца через шесть букв, захватываем по два символа
For $i = StringLen($sGenerate) - 1 To 1 Step -6
	$sResult &= StringMid($sGenerate, $i, 2)
Next
ConsoleWrite($sResult & @CRLF)

$aResult = StringSplit($sResult, '')
$sResult = ''
; меняем чет на нечет
For $i = 1 To $aResult[0] Step 2
	$sResult &= $aResult[$i + 1] & $aResult[$i]
Next
ConsoleWrite($sResult & @CRLF)
Одно замечание: может возникнуть ситуация, когда первый клиент сделал запрос времени, допустим в 10:10:59, и передал эту строку второму клиенту для проверки; второй клиент сделает запрос в 10:11:01 со всеми вытекающими последствиями...
Так что придется делать несколько запросов для точной синхронизации, или придумывать что-то иное.
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Redline
Спасибо . :smile:Пожалуйста убери проверку времени с инета .сделай Hotkey F8.
Нужно при нажатии на F8 фиксировалось с компа дата и время в формате dd mm yyyy hh: nn (без секунды) и это информация обрабатывалось.За ранее благодарю :wacko:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Код:
#include <String.au3>
HotKeySet('{Esc}', '_exit')
HotKeySet('{F8}', '_generate_string_by_local_time')
While 1
	Sleep(10)
WEnd

Func _generate_string_by_local_time()
	Local $sTime, $sEncrypt, $sResult, $aResult

	$sTime = StringFormat('%02d.%02d.%04d %02d:%02d', @MDAY, @MON, @YEAR, @HOUR, @MIN)
	$sEncrypt = _StringEncrypt(1, $sTime, 'dfg&/*23%31F_=+|')
	$sResult = ''

	For $i = StringLen($sEncrypt) - 1 To 1 Step -6
		$sResult &= StringMid($sEncrypt, $i, 2)
	Next
	$aResult = StringSplit($sResult, '')

	$sResult = ''
	For $i = 1 To $aResult[0] Step 2
		$sResult &= $aResult[$i + 1] & $aResult[$i]
	Next
	ConsoleWrite($sResult & @CRLF)
	Return $sResult
EndFunc

Func _exit()
	Exit
EndFunc
 
Автор
StarEdik

StarEdik

Новичок
Сообщения
365
Репутация
4
Redline
Отлично и большое Спасибо. :ok:Благодарю за помощь
Тема решена.
 
Верх