PowerShell脚本 随机密码生成器(ps随机密码生成器)

时间:2022-06-01 18:50:35

脚本作用:产生随机密码。每密码字符个数,密码数量,存盘位置等可以自定义。
脚本用法:
脚本采用了硬编码,所以你需要打开脚本,修改如下变量:
$生成密码总个数 = 1000
$每个密码位数 = 12
$存盘目录 = 'e:\脚本ps\log_ps\'
$大文件所在盘符 = 'f:\'
并保存,然后运行脚本,脚本运行的较慢,可以缩小powershell窗口,n分钟后去【$存盘目录】收取生成的密码
文件【小写加数字加特殊符号密码.txt】,【大小写加数字密码.txt】,【小写加数字密码.txt】。
提示:打入盘符+路径+s+<tab>键,脚本名自动补全。

全部代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#本脚本会在 $存盘目录 下生成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-Object length -Descending | select-object -first 10
if ($最大的10个文件.Length -lt 10)
{
    Write-Error "这个脚本根据大文件作为随机数种子,加随机数产生密码。找不到大文件将无法产生密码。"
    Write-Error "在 $大文件所在盘符 找不到 $大文件类型 文件,或文件总数不够10个"
    exit
}
 
 
$密码种子文件 = $最大的10个文件 | Get-Random
Write-Host "这个脚本根据大文件作为随机数种子,加随机数产生密码。找不到大文件将无法产生密码。"
Write-Host $密码种子文件.FullName,$密码种子文件.length
 
mkdir  $存盘目录
Write-Host "---生成的密码个数:$生成密码总个数 生成位置:$存盘目录 "
 
$文件流 = new-object system.io.filestream($密码种子文件,"open")
$null = $文件流.seek(0,0)
$reader = new-object System.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 (($随机数 -lt 123) -and ($随机数 -ge 32) )
        {
            $密码字母 = [char][int]$随机数
            if ($小写加数字 -ccontains $密码字母)
            {
                $一个密码 = $一个密码 + $密码字母
            }
        }
    }
    $结果 = $一个密码
    
    if ($结果 -match "[0-9]+")
    {
        #洗牌
        $结果 = $结果 | Get-Random -Count  $每个密码位数
        $结果 >> $小写加数字密码
      Write-Host "."  -NoNewline -ForegroundColor Yellow
        $小写加数字密码个数++
    }
}
Write-Host "`n---完成 $生成密码总个数 个【小写加数字】密码创建---"
 
$含大写密码个数 = 0
while ($含大写密码个数 -lt $生成密码总个数)
{
    $一个密码 = $null
    while ($一个密码.length -lt $每个密码位数)
    {
        $源自文件的随机数 = $reader.Readbyte()
        $ps随机数 = 110..150 | Get-Random
        $随机数 = $源自文件的随机数 - $ps随机数
        if (($随机数 -lt 123) -and ($随机数 -ge 32) )
        {
            $密码字母 = [char][int]$随机数
            if ($大小写加数字 -ccontains $密码字母)
            {
                $一个密码 = $一个密码 + $密码字母
            }
        }
    }
    $结果 = $一个密码
    
    if ($结果 -match "[0-9]+")
    {
        #洗牌
        $结果 = $结果 | Get-Random -Count  $每个密码位数
        $结果 >> $含大写密码
      Write-Host "."  -NoNewline -ForegroundColor Yellow
        $含大写密码个数++
    }
}
Write-Host "`n---完成 $生成密码总个数 个【大写小写加数字】密码创建---"
 
 
 
$含特殊符号密码个数 = 0
while ($含特殊符号密码个数 -lt $生成密码总个数)
{
    $一个密码 = $null
    while ($一个密码.length -lt $每个密码位数)
    {
        $源自文件的随机数 = $reader.Readbyte()
        $ps随机数 = 1..50 | Get-Random
        $随机数 = $源自文件的随机数 - $ps随机数
        if (($随机数 -lt 123) -and ($随机数 -ge 32) )
        {
            $密码字母 = [char][int]$随机数
            if ($含特殊符号 -ccontains $密码字母)
            {
                $一个密码 = $一个密码 + $密码字母
            }
        }
    }
    $结果 = $一个密码
    
    if ($结果 -match "[0-9]+")
    {
        #洗牌
        $结果 = $结果 | Get-Random -Count  $每个密码位数
        $结果 >> $含特殊符号密码
      Write-Host "."  -NoNewline -ForegroundColor Yellow
        $含特殊符号密码个数++
    }
}
Write-Host "`n---完成 $生成密码总个数 个【小写加数字加特殊符号】密码创建---"
 
#Write-Host `n,$文件流.Position
$文件流.Dispose()
 
Write-Host "`n---完成3种密码,每种: $生成密码总个数 个密码创建---`n别告诉我你缺密码!`n勤修改密码!"

打包下载:getpwd.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份,放在不同地方,每半年更新。

本人脚本新作【灰主牛 隐私记事本】 正在创作中,敬请期待。。。

原文链接:http://www.cnblogs.com/piapia/p/5184114.html