中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]怎样用批处理生成一个纯字母的密码字典
作者:
标题: [已结]怎样用批处理生成一个纯字母的密码字典 上一主题 | 下一主题
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『楼 主』:  [已结]怎样用批处理生成一个纯字母的密码字典

我想用批处理来生成一个纯字母(可以只考虑小写字母)的密码字典,用户输入密码长度,自动生成字典文件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 ]

2007-9-16 13:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 2 楼』:  

如果楼主要求不高的话
看看这个
你可以改一下
这个并没有做到把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 ]

2007-9-16 16:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 3 楼』:  

如果向得到更多的话
可以改一改:
for /l %%i in (1,1,!in!) do

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

不过要小心,!n!!n!太多了,运行会耗时间的

2007-9-16 16:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 4 楼』:  

将代码稍改一下tb
tb=abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
可以有大小写和数字

不过这个程序写的不好啊!

2007-9-16 17:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

输入1的时候,结果不对:
b
b
c
e
g
h
i
n
o
p
r
v
x

2007-9-17 00:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 6 楼』:  



  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

2007-9-17 01:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

试了下面这段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 ]



2007-9-17 03:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 8 楼』:  

没有比一层一层写for循环更高效的算法吗?

2007-9-17 06:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: