Тема: AHK: Генератор паролей. Один пароль для всего )
Как часто мы пользуемся паролями, использование которых противоречит элементарным требованиям безопасности - слишком короткий либо простой пароль, подбор которого по словарю или методом "грубой силы" не представляет труда.
Либо один пароль к большому количеству аккаунтов. Чем это может быть чревато, понятно - достаточно взломать один аккаунт, и все учетные данные на других сайтах могут также пострадать.
Хранить десятки сложных паролей в голове - это возможно, но таким талантом могут похвастать считанные единицы. Чтобы не хранить пароли на бумажке, приходится пользоваться услугами доп.ПО.
Написанный мной скрипт не хранит пароли в защищенном хранилище и не заполняет сам поля username/password (по крайней мере, пока )
Он всего лишь генерирует пароли на основе введенного мастер-кода и строки, которая будет уникальной для каждого пароля - например, для мастер-пароля superpassword и ключа forum.script-coding.com, скрипт выдаст пароль 7roLpw2OuaJFxvFO.
P.S. Скрипт написан после знакомства с этой темой, все предложения/замечания категорически приветствуются.
PASSWORD_TOOLTIP := True
Gui, New , +Owner +AlwaysOnTop +HwndId
Gui, Add, Slider, x120 w300 Range1-16 ToolTip vMySlider gNewPass, 16
Gui, Add, Text, x2 y13 w100 h20 , Кол-во знаков
Gui, Add, Text, x2 y60 w100 h20 , Главный пароль
Gui, Add, Text, x2 w60 h30 , Ключ
Gui, Add, Edit, x120 y60 W300 vMasterPass gNewPass +Password -WantReturn
Gui, Add, Edit, W300 vNewStr gNewPass -WantReturn
Gui, Add, Button, x120 y120 w110 h30 Default, OK
Gui, Add, Button, x2 y120 w30 h30 , ?
Gui, Add, Button, x250 y120 w110 h30 , Cancel
Gui, Show, w430 y140, PassGen v0.01
return
NewPass:
Gui, Submit, NoHide
if PASSWORD_TOOLTIP
tooltip % PassGen(MySlider, MasterPass NewStr)
return
ButtonOK:
Gui, Submit
Clipboard := PassGen(MySlider, MasterPass NewStr)
ExitApp
#If WinActive("ahk_id" Id)
Esc::
ButtonCancel:
GuiClose:
ExitApp
#If
Button?:
MsgBox,,Помощь,
( Join`s
`t`t`tГенератор паролей.`n`n
Позволяет создавать уникальные пароли длинной от 1 до 16 символов.`n
В качестве параметра "Ключ" может служить название программы,
фраза или адрес сайта, для которого создается пароль.
`n`nПараметр "Главный пароль" можно вводить один для всех ключей,
он гарантирует защиту паролей - даже зная вводимые ключевые фразы и алгоритм,
без главного пароля невозможно восстановить генерируемые пароли,
кроме как используя метод полного перебора.
`n`nЕсли оставить поля "Главный пароль" и "Ключ" пустыми, программа
сгенерирует случайный пароль. При нажатии клавиши 'Enter' или кнопки 'OK'
программа закрывается, сохранив пароль в буфер обмена.
)
return
PassGen(PassLen, InitStr = "") { ; Параметры - длина пароля и строка инициализации
alph = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
len := StrLen(alph)
If !InitStr
InitStr = % A_TickCount
a := StrMD5(InitStr)
loop % PassLen
Pass .= SubStr(alph, mod("0x" SubStr(a, A_Index*2, 2), len), 1)
return Pass
}
StrMD5( V ) { ; www.autohotkey.com/forum/viewtopic.php?p=376840#376840
VarSetCapacity( MD5_CTX,104,0 ), DllCall( "advapi32\MD5Init", UInt,&MD5_CTX )
DllCall( "advapi32\MD5Update", UInt,&MD5_CTX, A_IsUnicode ? "AStr" : "Str",V
, UInt,StrLen(V) ), DllCall( "advapi32\MD5Final", UInt,&MD5_CTX )
Loop % StrLen( Hex:="123456789ABCDEF0" )
N := NumGet( MD5_CTX,87+A_Index,"Char"), MD5 .= SubStr(Hex,N>>4,1) . SubStr(Hex,N&15,1)
Return MD5
}