中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-26 12:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]怎样用批处理生成一个纯字母的密码字典 查看 1,774 回复 7
楼 主 [已结]怎样用批处理生成一个纯字母的密码字典 发表于 2007-09-16 13:25 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
我想用批处理来生成一个纯字母(可以只考虑小写字母)的密码字典,用户输入密码长度,自动生成字典文件dictionary.txt
如果输入3,则dictionary.txt的内容如下:
aaa
aab
aac
...
zzx
zzy
zzz

如果输入4,则dictionary.txt的内容如下:
aaaa
aaab
aaac
....
zzzx
zzzy
zzzz


望高人指点。

[ Last edited by HAT on 2008-11-12 at 21:42 ]
2 发表于 2007-09-16 16:41 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
如果楼主要求不高的话
看看这个
你可以改一下
这个并没有做到把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 ]
3 发表于 2007-09-16 16:45 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
如果向得到更多的话
可以改一改:
for /l %%i in (1,1,!in!) do

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

不过要小心,!n!!n!太多了,运行会耗时间的
4 发表于 2007-09-16 17:04 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
将代码稍改一下tb
tb=abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
可以有大小写和数字

不过这个程序写的不好啊!
5 发表于 2007-09-17 00:06 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
输入1的时候,结果不对:
b
b
c
e
g
h
i
n
o
p
r
v
x
6 发表于 2007-09-17 01:51 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
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
7 发表于 2007-09-17 03:29 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
试了下面这段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 ]
8 发表于 2007-09-17 06:30 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
没有比一层一层写for循环更高效的算法吗?
论坛跳转: