如何加密含密码的文本文件并在PowerShell中生成PSCredential对象?
可行方案说明
该需求有成熟的原生实现方案,不需要依赖第三方工具,PowerShell内置的安全字符串能力就可以直接满足。
实现步骤
1. 加密存储密码到文本文件
默认加密方式会绑定当前登录用户+当前设备,只有加密时使用的用户、在同一台Windows设备上才能解密,安全性更高:
# 交互式输入待存储的密码,加密后写入指定路径的文本文件 Read-Host "请输入需要存储的密码" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\自定义路径\密码存储文件.txt"
如果有跨用户/跨设备解密的需求,可以自定义AES密钥加密,密钥单独存储做好权限管控即可:
# 生成32位AES密钥,保存到安全路径,不要和密码文件同目录 $AESKey = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) $AESKey | Out-File "C:\安全密钥存储路径\AES密钥.key" # 用指定密钥加密密码后写入文件 Read-Host "请输入需要存储的密码" -AsSecureString | ConvertFrom-SecureString -Key $AESKey | Out-File "C:\自定义路径\密码存储文件.txt"
注意:自定义密钥场景下,密钥的泄露会直接导致密码文件被破解,需严格管控密钥的访问权限。
2. 读取加密文件生成PSCredential对象
默认绑定加密场景的解密逻辑
# 替换为实际使用的用户名 $username = "域名\用户名" # 读取加密文件转换为安全字符串 $securePassword = Get-Content "C:\自定义路径\密码存储文件.txt" | ConvertTo-SecureString # 生成PSCredential对象 $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
自定义AES密钥场景的解密逻辑
$username = "域名\用户名" # 读取预先存储的AES密钥 $AESKey = Get-Content "C:\安全密钥存储路径\AES密钥.key" $securePassword = Get-Content "C:\自定义路径\密码存储文件.txt" | ConvertTo-SecureString -Key $AESKey $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
注意事项
- 密码存储文件需设置严格的NTFS权限,仅开放给需要读取的账号,其余账号全部禁止访问
- 使用默认绑定加密方式时,不要修改加密账号的登录密码,否则会导致解密失败
- 不要将密钥硬编码到脚本文件中,也不要和密码加密文件存储在同一路径
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

