Войти

Показать полную графическую версию : генератор ключей


lohi1234567
03-06-2011, 21:37
Доброе время суток.
Есть интересная мысля: нужно разработать скрипт который будет генерить ключ (желательно с определенного набора символов).
Идея в том что он должен генерироваться каждый день разный(или 2 дня, неделю...) с привязной до имя пользователя, имя компьютера, даты, и тд. тп. Длину бы тоже неплохо ограничить скажем например от 5 до 8 символов.
Вот собственно такая задачка.

Foreigner
04-06-2011, 05:09
lohi1234567,
Пример ключа можно? Пять случайных символов:

@echo off
setlocal

for %%i in (q Q w W e E r R t T y ^
Y u U i I o O p P a A ^
s S d D f F g G h H j ^
J k K l L z Z x X c C ^
v V b B n N m M 0 1 2 ^
3 4 5 6 7 8 9 ! @ # _ ^
$ - +) do call:set "%%i"


for /f "tokens=2 delims==" %%i in ('set sym_') do call:key "%%i"
echo %key%
goto:eof

:set
set "sym_%random%=%~1"
goto:eof

:key
set /a cnt+=1
if not %cnt% gtr 5 set "key=%key%%~1"

amel27
04-06-2011, 08:45
с привязной до имя пользователя, имя компьютера, даты, и тд. тп. Длину бы тоже неплохо ограничить скажем например от 5 до 8 символов. »
- составить строку из выбранной последовательности параметров;
- взять (MD5) хэш полученной строки (утилит предостаточно);
- выбрать в заданном порядке нужное количество символов (5-8);
- если последовательность 0-F не устраивает, потребуется дополнительный шаг перекодировки.

тогда "секрет" будет состоять из:

- исходных параметров и их порядка во входной строке;
- алгоритма отбора символов из хэша в ключ;
- таблицы перекдировки (если применяется)

lohi1234567
04-06-2011, 15:02
Foreigner, Ваш пример отлично генерирует случайный ключ из заданной последовательности, но важным является тот факт что все зависимости от количества раз у одного и того же пользователя на этом же компьютере ключ на протяжении дня должен быть один и тот же на следующий день другой, но повторятся тоже должен целый день.
Пример ключа можно? »
любой произвольный, можно и 0-F.
Ясно что сгенерированный ключ не должен "открыто заявлять" что он построен с имени пользователя, даты...

amel27, Ваша логика мне ясна и понятна, но хотелось бы без применения сторонних утилит(если это возможно)

P.S. Спасибо что заинтересовались и ответили по данной теме.

amel27
05-06-2011, 13:28
хотелось бы без применения сторонних утилит(если это возможно) »Хорошую хэш-функцию на CMD реализовать проблематично, для этого лучше использовать специализированные утилиты - надежней и быстрее. В качестве простого примера приведу вариант кодирования строки по алгоритму ROT13, после чего строка делится на несколько подстрок (в зависимости от требуемой длины ключа) и в каждой такой подстроке выполняется слияние всех символов простым XOR.@echo off
Set "STR1=TEST_0123_test_4567"
Set "STR2=test_0123_TEST_4567"

Call:EncodeString 4 STR1
Call:EncodeString 4 STR2

Pause>Nul
EXIT

:EncodeString %KeyLength_By2% %VarString% [%VarKey%]
::------------------------------------------------------
SetLocal EnableDelayedExpansion
(For /L %%i In (32,1,126) Do (Set/A "$n=%%i+13-(%%i-32)/82*95"
%COMSPEC% /C "Exit !$n!"& Set "$n=!=ExitCode:~-2!"
%COMSPEC% /C "Exit %%i" & Set "$_!=ExitCodeASCII!=!$n!")
Set "tmp=!%~2!!%~2!FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5 D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3 A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271 706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F 3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D 0C0B0A09080706050403020100"
Set/A "LN=0x!tmp:~510,2!,IN=LN/%~1+1"& Set "NEWSTR="
For /L %%m In (1,1,%~1) Do (Set/A XOR=0
For /L %%n In (1,1,!IN!) Do (Set/A "LI=%%m-1+(%%n-1)*%~1"
Call Set "CHR=%%%~2:~!LI!,1%%"& Set "ASC="
If Defined CHR Call Set "ASC=0x%%$_!CHR!%%"
Set/A "XOR=XOR^ASC")
%COMSPEC% /C "Exit !XOR!"& Set "NEWSTR=!NEWSTR!!=ExitCode:~-2!")
)
EndLocal& If "%~3"=="" (Echo:%NEWSTR%) Else Set "%~3=%NEWSTR%"
GoTo:EOF
особенности метода:
- в строке не должно быть русских букв (только ASCII);
- регистр не учитывается (видно из примера);
- длина строки не должна превышать 255 символов.

P.S. вариант на VBS: VBS/WSH/JS - Вычисление хэша MD5 строки (http://forum.oszone.net/showthread.php?t=197687)




© OSzone.net 2001-2012