Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   генератор ключей (http://forum.oszone.net/showthread.php?t=208189)

lohi1234567 03-06-2011 21:37 1688038

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

Foreigner 04-06-2011 05:09 1688167

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 1688188

Цитата:

Цитата lohi1234567
с привязной до имя пользователя, имя компьютера, даты, и тд. тп. Длину бы тоже неплохо ограничить скажем например от 5 до 8 символов. »

- составить строку из выбранной последовательности параметров;
- взять (MD5) хэш полученной строки (утилит предостаточно);
- выбрать в заданном порядке нужное количество символов (5-8);
- если последовательность 0-F не устраивает, потребуется дополнительный шаг перекодировки.

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

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

lohi1234567 04-06-2011 15:02 1688326

Foreigner, Ваш пример отлично генерирует случайный ключ из заданной последовательности, но важным является тот факт что все зависимости от количества раз у одного и того же пользователя на этом же компьютере ключ на протяжении дня должен быть один и тот же на следующий день другой, но повторятся тоже должен целый день.
Цитата:

Цитата Foreigner
Пример ключа можно? »

любой произвольный, можно и 0-F.
Ясно что сгенерированный ключ не должен "открыто заявлять" что он построен с имени пользователя, даты...

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

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

amel27 05-06-2011 13:28 1688738

Цитата:

Цитата lohi1234567
хотелось бы без применения сторонних утилит(если это возможно) »

Хорошую хэш-функцию на 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!FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100"
 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 строки


Время: 13:48.

Время: 13:48.
© OSzone.net 2001-