含逗号、问号或冒号的PowerShell SecureString无法正常使用求助
问题解决方法
你的脚本失效并非密码里的特殊字符导致,核心问题是读取密钥文件时未将内容转换为符合要求的字节数组。ConvertFrom-SecureString要求密钥是16/24/32字节的AES密钥,而Get-Content $KeyFile默认读取的是字符串格式,会导致加密逻辑异常,在密码含特殊字符时问题会被触发。
修正后的完整脚本
# 创建SecureString对象并加密存储 $PasswordFile = "X:\pwd\password.txt" # 存储加密后的密码 $KeyFile = "X:\pwd\password.key" # AES密钥文件路径 # 读取密钥并转换为字节数组(关键修正) $Key = Get-Content $KeyFile -Raw | ForEach-Object { [byte[]]$_ } # 直接转换带特殊字符的密码为SecureString $Password = ConvertTo-SecureString "azerty,12?34:5" -AsPlainText -Force # 加密并写入文件 $Password | ConvertFrom-SecureString -Key $Key | Out-File $PasswordFile -Force
补充说明
- 合法密钥的生成方式:如果你的密钥文件是手动创建的,需确保它符合AES密钥规范,可通过以下命令生成标准密钥:
# 生成32字节AES密钥并保存到文件 $Key = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key) $Key | Out-File $KeyFile -Force
- 密码无需转义:
ConvertTo-SecureString -AsPlainText -Force可以直接处理包含逗号、问号、冒号等任意特殊字符的字符串,不需要添加任何转义符。
内容的提问来源于stack exchange,提问作者Alexandre Nogard
相关产品推荐
相关产品推荐

