Board logo

标题: [已结]怎样用批处理生成一个纯字母的密码字典 [打印本页]

作者: HAT     时间: 2007-9-16 13:25    标题: [已结]怎样用批处理生成一个纯字母的密码字典

我想用批处理来生成一个纯字母(可以只考虑小写字母)的密码字典,用户输入密码长度,自动生成字典文件dictionary.txt
如果输入3,则dictionary.txt的内容如下:

  Quote:
aaa
aab
aac
...
zzx
zzy
zzz

如果输入4,则dictionary.txt的内容如下:

  Quote:
aaaa
aaab
aaac
....
zzzx
zzzy
zzzz

望高人指点。

[ Last edited by HAT on 2008-11-12 at 21:42 ]
作者: scriptor     时间: 2007-9-16 16:41
如果楼主要求不高的话
看看这个
你可以改一下
这个并没有做到把26个字母做全排列!


@echo off
setlocal enabledelayedexpansion
set tb=abcdefghijklmnopqrstuvwxyz
set/p in=" 输入密码位数N: "
for /l %%i in (1,1,!in!) do (
for /l %%a in (0,1,25) do (
  set /a n+=1
  set /a m=%%a-!random:~0,1!
  if !m! lss 0 set /a m=-m
  if !n! leq !in! (call :out !n! !m!) else (set/a n=0&echo.>>dic.txt)
)
)
echo.
start dic.txt
endlocal
pause&exit/b

:out
>>dic.txt set/p out=!tb:~%2,1!<nul


[ Last edited by scriptor on 2007-9-16 at 04:48 PM ]
作者: scriptor     时间: 2007-9-16 16:45
如果向得到更多的话
可以改一改:
for /l %%i in (1,1,!in!) do

for /l %%i in (1,1,!n!!in!) do

不过要小心,!n!!n!太多了,运行会耗时间的
作者: scriptor     时间: 2007-9-16 17:04
将代码稍改一下tb
tb=abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
可以有大小写和数字

不过这个程序写的不好啊!
作者: HAT     时间: 2007-9-17 00:06
输入1的时候,结果不对:
b
b
c
e
g
h
i
n
o
p
r
v
x
作者: scriptor     时间: 2007-9-17 01:51


  Quote:
Originally posted by HAT at 2007-9-17 00:06:
输入1的时候,结果不对:
b
b
c
e
g
h
i
n
o
p
r
v
x

嗯,是的
我这个只是随机输出

我说过了
它并没有解决26个字母的全排列问题
你可以尝试着解决一下

思路有很多
不一定我的就是好的e
作者: zh159     时间: 2007-9-17 03:29
试了下面这段4位的,在我机子(3G CPU)上从aaaa到zzzz得花一分钟左右(不显示echo部分),所以想用批处理的出这样的字典还是算了吧
@echo off
set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
for %%a in (%str%) do (
  for %%c in (%str%) do (
    for %%e in (%str%) do (
      for %%g in (%str%) do (
  echo %%a%%c%%e%%g
      )
    )
  )
)
pause
exit
给段10位以内的:
@echo off
set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
for /l %%n in (1,1,10) do (
  set for%%n=rem
  set display%%n=
)

set num=
set /p num= 输入密码位数N (1≥N≥10):
for /l %%n in (1,1,%num%) do set for%%n=
echo.

set time_=%time%
for %%a in (%str%) do (set display1=%%a
%for2%  for %%c in (%str%) do (set display2=%%c
%for3%    for %%e in (%str%) do (set display3=%%e
%for4%      for %%g in (%str%) do (set display4=%%g
%for5%        for %%i in (%str%) do (set display5=%%i
%for6%          for %%k in (%str%) do (set display6=%%k
%for7%            for %%m in (%str%) do (set display7=%%m
%for8%              for %%o in (%str%) do (set display8=%%o
%for9%                for %%q in (%str%) do (set display9=%%q
%for10%                  for %%s in (%str%) do (set display10=%%s
call echo.%%display1%%%%display2%%%%display3%%%%display4%%%%display5%%%%display6%%%%display7%%%%display8%%%%display9%%%%display10%%
%for2%                  )
%for3%                )
%for4%              )
%for5%            )
%for6%          )
%for7%        )
%for8%      )
%for9%    )
%for10%  )
)
echo.
echo %time_%
echo %time%
echo.
pause
exit
[ Last edited by zh159 on 2007-9-17 at 03:31 AM ]
作者: HAT     时间: 2007-9-17 06:30
没有比一层一层写for循环更高效的算法吗?