::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Copyright (c) 2009 Matt AlvarÃz , Timo Salmi ::
:: All rights reserved. ::
:: ::
:: Redistribution and use in source and binary forms, with or without ::
:: modification, are permitted provided that the following conditions ::
:: are met: ::
:: ::
:: 1. Redistributions of source code must retain the above copyright ::
:: notice, this list of conditions and the following disclaimer. ::
:: 2. Redistributions in binary form must reproduce the above copyright ::
:: notice, this list of conditions and the following disclaimer in the ::
:: documentation and/or other materials provided with the distribution. ::
:: 3. Neither the name of copyright holders nor the names of its ::
:: contributors may be used to endorse or promote products derived ::
:: from this software without specific prior written permission. ::
:: ::
:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ::
:: ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ::
:: TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ::
:: PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS ::
:: BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ::
:: CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ::
:: SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ::
:: INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ::
:: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ::
:: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ::
:: POSSIBILITY OF SUCH DAMAGE. ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF&SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET CHARS=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 @#/()=+-,.;:_*'
:_MAIN
CLS
ECHO Security in password:
ECHO.
ECHO 1. Low
ECHO 2. Medium
ECHO 3. High
ECHO.
ECHO 0. Exit
ECHO.
SET /P "SECLEVEL_=> "
IF [%SECLEVEL_%] EQU [1] SET "MAXCHAR=25"&GOTO:_LENGHT
IF [%SECLEVEL_%] EQU [2] SET "MAXCHAR=51"&GOTO:_LENGHT
IF [%SECLEVEL_%] EQU [3] SET "MAXCHAR=77"&GOTO:_LENGHT
IF [%SECLEVEL_%] EQU [0] EXIT
GOTO:_MAIN
:_LENGHT
CLS
ECHO Length of password:
ECHO.
SET /P "PASSWORDLENGTH_=> "
IF [%PASSWORDLENGTH_%] EQU [] GOTO:_LENGHT
SET RESULT_=
FOR /L %%I IN (1,1,%PASSWORDLENGTH_%) DO (
CALL :_ONERANDOMCHAR %MAXCHAR% RNDCHR_
SET RESULT_=!RESULT_!!RNDCHR_!
)
ECHO %RESULT_%|FINDSTR "[0123456789]">NUL
IF [%ERRORLEVEL%] EQU [0] SET FOUNDNUMBER=TRUE
ECHO %RESULT_%|FINDSTR "[ @#/()=+-,.;:_*']">NUL
IF [%ERRORLEVEL%] EQU [0] SET FOUNDSPECIAL=TRUE
IF DEFINED REQUIRENUMBER IF [%FOUNDNUMBER%] EQU [] GOTO:_ONERANDOMCHAR
IF DEFINED REQUIRESPECIAL IF [%FOUNDSPECIAL%] EQU [] GOTO:_ONERANDOMCHAR
GOTO:_RESULT
:_ONERANDOMCHAR
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET /A DIV_=32767/%1
SET /A RAND_=%RANDOM%/%DIV_%
SET RETURN_=!CHARS:~%RAND_%,1!
ENDLOCAL&SET "%2=%RETURN_%"&GOTO:EOF
:_RESULT
CLS
ECHO Password:
ECHO.
ECHO %RESULT_%
ECHO.
SET /P "SAVE_=Save Password? (Y/N): "
IF /I [%SAVE_%] EQU [Y] ECHO.%RESULT_%>>Passwords.txt&GOTO:_MAIN
IF /I [%SAVE_%] EQU [N] GOTO:_MAIN
GOTO:_RESULT