PowerShell脚本 随机密码生成器(ps随机密码生成器)
脚本作用:产生随机密码。每密码字符个数,密码数量,存盘位置等可以自定义。
脚本用法:
脚本采用了硬编码,所以你需要打开脚本,修改如下变量:
$生成密码总个数=1000
$每个密码位数=12
$存盘目录='e:\脚本ps\log_ps\'
$大文件所在盘符='f:\'
并保存,然后运行脚本,脚本运行的较慢,可以缩小powershell窗口,n分钟后去【$存盘目录】收取生成的密码
文件【小写加数字加特殊符号密码.txt】,【大小写加数字密码.txt】,【小写加数字密码.txt】。
提示:打入盘符+路径+s+
全部代码:
#本脚本会在$存盘目录下生成3个文件(小写加数字密码.txt,大小写加数字密码.txt,小写加数字加特殊符号密码.txt) #每个文件中含有$生成密码总个数个密码。 #这个脚本根据大文件作为随机数种子,加随机数产生密码。找不到大文件将无法产生密码。 $生成密码总个数=1000 $每个密码位数=12 $存盘目录='e:\脚本ps\log_ps\' $大文件所在盘符='f:\' [array]$大文件类型="*.rmvb","*.mkv","*.mp4","*.avi" $小写加数字密码=$存盘目录+'小写加数字密码.txt' $含大写密码=$存盘目录+'大小写加数字密码.txt' $含特殊符号密码=$存盘目录+'小写加数字加特殊符号密码.txt' #$ErrorActionPreference="SilentlyContinue" $最大的10个文件=Get-ChildItem-path$大文件所在盘符-recurse-force-Include$大文件类型|Sort-Objectlength-Descending|select-object-first10 if($最大的10个文件.Length-lt10) { Write-Error"这个脚本根据大文件作为随机数种子,加随机数产生密码。找不到大文件将无法产生密码。" Write-Error"在$大文件所在盘符找不到$大文件类型文件,或文件总数不够10个" exit } $密码种子文件=$最大的10个文件|Get-Random Write-Host"这个脚本根据大文件作为随机数种子,加随机数产生密码。找不到大文件将无法产生密码。" Write-Host$密码种子文件.FullName,$密码种子文件.length mkdir$存盘目录 Write-Host"---生成的密码个数:$生成密码总个数生成位置:$存盘目录" $文件流=new-objectsystem.io.filestream($密码种子文件,"open") $null=$文件流.seek(0,0) $reader=new-objectSystem.IO.BinaryReader($文件流) $小写字母="a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","v","w","x","y","z" #小写字母没有字母l $数字="2","3","4","5","6","7","8","9" #没有0,1 $大写字母="A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z" $特殊符号="~","!","@","#","$","%","^","&","*","(",")" #大写字母没有字母I,O $小写加数字=$小写字母+$数字 $大小写加数字=$大写字母+$小写字母+$数字 $含特殊符号=$小写字母+$数字+$特殊符号 $小写加数字密码个数=0 while($小写加数字密码个数-lt$生成密码总个数) { $一个密码=$null while($一个密码.length-lt$每个密码位数) { $源自文件的随机数=$reader.Readbyte() $ps随机数=1..50|Get-Random $随机数=$源自文件的随机数-$ps随机数 if(($随机数-lt123)-and($随机数-ge32)) { $密码字母=[char][int]$随机数 if($小写加数字-ccontains$密码字母) { $一个密码=$一个密码+$密码字母 } } } $结果=$一个密码 if($结果-match"[0-9]+") { #洗牌 $结果=$结果|Get-Random-Count$每个密码位数 $结果>>$小写加数字密码 Write-Host"."-NoNewline-ForegroundColorYellow $小写加数字密码个数++ } } Write-Host"`n---完成$生成密码总个数个【小写加数字】密码创建---" $含大写密码个数=0 while($含大写密码个数-lt$生成密码总个数) { $一个密码=$null while($一个密码.length-lt$每个密码位数) { $源自文件的随机数=$reader.Readbyte() $ps随机数=110..150|Get-Random $随机数=$源自文件的随机数-$ps随机数 if(($随机数-lt123)-and($随机数-ge32)) { $密码字母=[char][int]$随机数 if($大小写加数字-ccontains$密码字母) { $一个密码=$一个密码+$密码字母 } } } $结果=$一个密码 if($结果-match"[0-9]+") { #洗牌 $结果=$结果|Get-Random-Count$每个密码位数 $结果>>$含大写密码 Write-Host"."-NoNewline-ForegroundColorYellow $含大写密码个数++ } } Write-Host"`n---完成$生成密码总个数个【大写小写加数字】密码创建---" $含特殊符号密码个数=0 while($含特殊符号密码个数-lt$生成密码总个数) { $一个密码=$null while($一个密码.length-lt$每个密码位数) { $源自文件的随机数=$reader.Readbyte() $ps随机数=1..50|Get-Random $随机数=$源自文件的随机数-$ps随机数 if(($随机数-lt123)-and($随机数-ge32)) { $密码字母=[char][int]$随机数 if($含特殊符号-ccontains$密码字母) { $一个密码=$一个密码+$密码字母 } } } $结果=$一个密码 if($结果-match"[0-9]+") { #洗牌 $结果=$结果|Get-Random-Count$每个密码位数 $结果>>$含特殊符号密码 Write-Host"."-NoNewline-ForegroundColorYellow $含特殊符号密码个数++ } } Write-Host"`n---完成$生成密码总个数个【小写加数字加特殊符号】密码创建---" #Write-Host`n,$文件流.Position $文件流.Dispose() Write-Host"`n---完成3种密码,每种:$生成密码总个数个密码创建---`n别告诉我你缺密码!`n勤修改密码!"
打包下载:getpwd_jb51.rar
------【脚本特色】------
不求最快,但求真随机。
伪随机数:
随机密码其实就是随机数的组合而已,.net的随机数生成很快很好,但也是伪随机数。python的随机数功能
也很快很好,但也只是伪随机数而已。生成的都是伪随机数。
真随机数:
没法生成真随机数,只能【取】真随机数。
本脚本之妙:
我写了好几个版本的随机密码生成,开始都是用【调用库,生成伪随机数】法。后来我找到了【取真随机数】的方法,我简直忍不住要赞美我啊,呵呵。
可以自定义随机字符:
比如:本脚本生成器生成的随机数中,默认没有0,1,i,l,o这些容易混淆的字母。
开放源码,无后门。
脚本缺点:比较慢。
------【脚本原理,流程】------
脚本首先会用dir你的【$大文件所在盘符】。这一步比较慢,无权限会报错的信息我也没关闭,目的是直观。
找出【$大文件类型】定义的10个最大的文件,这些文件默认是"*.rmvb","*.mkv","*.mp4","*.avi"
没错,就是【从大电影文件中取真随机数】!
随机选其中一个文件,按照一定规则取数,然后组合成固定长度的密码,然后再随机打乱顺序,
然后根据是否有数字,特殊符号,抛弃不符合的随机数。
本脚本另一个妙的地方是:(为了随机故意而为的算法)
即便你锁定(固定)输入源,即大电影文件,
只要文档内,字节内容随机,产生的密码就随机。即2次运行脚本,将产生2个同名文档(当然你要把前面的改名),对比之,发现生成的每个随机数都不同。
如果文档内,字节内容固定,如都是00,255之类,则不会产生密码。
------【最终建议】------
建议5年内更换一次有可能泄密的帐号。如果实在不能换帐号,必须5年内登录(使用)过1次。
超5年不换账号,不登陆的银行卡的钱,都有可能没了。连国家过个10年8年都更改钱的样式。
powershell传教士原创文章2016-02-06允许转载,但必须保留名字和出处,否则追究法律责任
建议每年更换密码,或者更短的时间更换密码。密码必须复杂,不同帐号的密码绝不相同。
复杂的密码记在电脑上,然后加密。复制3份,放在不同地方,每半年更新。
本人脚本新作【灰主牛隐私记事本】正在创作中,敬请期待。。。