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

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

全部代码:

#本脚本会在 $存盘目录 下生成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_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份,放在不同地方,每半年更新。

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

(0)

相关推荐

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

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

  • Powershell 脚本数字签名实现方法

    脚本很容易被冒名顶替或者更改,因为它们是由纯文本构成的.数字签名为脚本提供了更高的安全性,因为它能确定脚本和脚本的编辑者的唯一性,并且不能被更改.作为脚本的发布者,你能确定你的脚本没有被恶意篡改.即使专家也无能为力,因为这种机制是基于复杂逻辑的.幸运的是,在实际应用中,你不需要深究这些细节,只需要掌握Powershell脚本签名的机制和过程. 准备一个合适的证书 因为不能使用传统的纸质签名给Powershell脚本进行签名,你需要另一个工具"证书".证书就像一把私有并且安全的钥匙.证书

  • PowerShell脚本监控文件夹变化实例

    本文介绍使用PowerShell来监视一个指定的文件夹,包括新建文件.删除文件.重命名文件等操作均会被监控或监视.本文使用了System.IO.FileSystemWatcher这个.NET对象.首先,我们来看看程序: 复制代码 代码如下: # 定义要监控的文件夹,这个文件夹必须先存在. $folder = 'D:\test' # 定义每次监控的间隔时间,这时定义为1000毫秒,即1秒 $timeout = 1000 # 创建文件系统监视对象 $FileSystemWatcher = New-O

  • PowerShell脚本写的文件.ps1文件介绍

    .ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是".ps1"文件? 这个是PowerShell写的脚本文本,你可以在记事本中写一段PowerShell代码,然后将其保存为"xxx.ps1",后面要使用它的时候,双击即可运行了.这有点像批处理的".bat"文件,也有点像VBScript的".vbs"文件.这些都是Wi

  • 在cmd中直接运行PowerShell脚本文件的方法

    以前在cmd中执行powershell,我们都是这样: 复制代码 代码如下: PowerShell.exe -file a.ps1 现在想在cmd中这样执行: 复制代码 代码如下: a.ps1 此时需要将Powershell脚本的默认打开方式选择为Powershell.exe,可以鼠标右键操作. 也可以使用下面的cmd以管理员权限打开,然后运行命令: 复制代码 代码如下: ftype Microsoft.Powershellscript.1="%SystemRoot%\system32\wind

  • Powershell脚本的4种执行权限介绍

    Restricted--默认的设置, 不允许任何script运行 AllSigned--只能运行经过数字证书签名的script RemoteSigned--运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名 Unrestricted--允许所有的script运行 windows默认不允许任何脚本运行,你可以使用"Set-ExecutionPolicy"cmdlet来改变的你PowerShell环境.例如,你可以使用如下命令让PowerShell运

  • PowerShell脚本性能优化技巧总结

    最终优化 在你写脚本时,不要老是想着去优化,因为你的部分优化代码可能最终被丢弃.而且老是想着优化也会降低你的生产效率,因为和CPU的时间相比,脚本编写者的时间可能会更宝贵. 使用过滤参数 PowerShell可能会消耗很多资源,因为许多Cmdlet本身的设计就是用来提供数目很大的数据.所以,如果你使用的Cmdlet命令支持-Filter, -Include, 和 -Exclude这样的过滤条件,就尽量使用它们. 首先如果一条命令支持-Filter 过滤器参数,那就说明这里可能隐藏着一个对象访问A

  • 使用HTTP api简单的远程执行PowerShell脚本

    可能有些情况下,你不想完全体验通过PSRP(PowerShell远程处理协议)远程管理,或有需要从非Windows系统上执行一些PowerShell脚本.你可能会像我很久之前在这篇文章中写的那样直接基于WS-Man来写代码.但是那样很复杂,并且需要WS-Man和SOAP的一些知识. 我在PowerShell脚本中使用.Net HttpListener类写了个HTTP监听器.你可以非常简单地启动一个监听器的实例(需要提升权限监听网络),现在你可以执行任意的PowerShell命令了,它还可以返回多

  • 添加powershell脚本来解决nuget打包文件丢失问题

    对于进行nuget打包时,有时我们需要添加一个配置文件,就是一些文本文件,而这些文件我们在网站发布时需要同时复制到输出目录,否则会出现文件丢失的问题,我们在打包时通过添加powershell脚本来解决它. 一般添加powershell包之后,包的格式如下 添加-〉工具-〉install.ps1脚本 param($installPath, $toolsPath, $package, $project) $configItem = $project.ProjectItems.Item("log4.c

  • PowerShell 脚本中的密码保存的方法

    引言 笔者在<PowerShell 远程执行任务>一文中提到了在脚本中使用用户名和密码的基本方式: $Username = 'xxxx' $Password = 'yyyy' $Pass = ConvertTo-SecureString $Password -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$Pass 上面的代码仅仅是能

随机推荐