执行带加密密码的PowerShell脚本时遇ConvertTo-SecureString加密错误
PowerShell ConvertTo-SecureString 加密操作错误排查
出现ConvertTo-SecureString: Error occurred during a cryptographic operation.错误,大概率是这几个原因:
加密和解密的上下文不匹配
默认情况下,ConvertFrom-SecureString生成的加密字符串是绑定到当前登录用户+当前机器的,依赖Windows DPAPI(数据保护API)。如果加密密码的用户和当前运行脚本的用户不是同一个,或者换了另一台机器执行解密,就会触发这个错误。加密文件内容损坏
检查C:\SecureFolder\FileWithPasswordEncrypted.txt里的内容是否完整,有没有被意外编辑、添加换行或多余字符。正常加密后的内容是连续的长字符串,任何内容篡改都会导致解密失败。加密时的PowerShell环境异常
极少数情况下,加密时的PowerShell版本或系统环境和当前解密环境差异过大,也可能引发问题,但这种情况很少见。
解决办法
在当前用户/机器下重新加密密码
执行以下命令生成新的加密密码文件:"你的明文密码" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "C:\SecureFolder\FileWithPasswordEncrypted.txt"跨用户/机器使用自定义密钥加密
如果需要在不同用户或机器间共享加密密码,必须使用自定义密钥:# 生成16字节的加密密钥(可自行调整长度,需符合AES要求) $key = (1..16) | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 } # 加密密码并保存,同时妥善保管密钥文件 "你的明文密码" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString -Key $key | Out-File "C:\SecureFolder\FileWithPasswordEncrypted.txt" $key | Out-File "C:\SecureFolder\EncryptionKey.txt" # 解密时加载对应密钥 $key = Get-Content "C:\SecureFolder\EncryptionKey.txt" $PasswordEncrypted = Get-Content "C:\SecureFolder\FileWithPasswordEncrypted.txt" | ConvertTo-SecureString -Key $key
内容的提问来源于stack exchange,提问作者Gerard Jaryczewski
相关产品推荐
相关产品推荐

