使用ConvertTo-SecureString时参数Key绑定失败问题
ConvertTo-SecureString参数绑定错误解决方法
错误原因
ConvertTo-SecureString的-Key参数要求传入System.Byte[]类型的字节数组,你直接传入了字符串类型的密钥,导致类型转换失败,触发错误提示。
修正方案
- 将字符串密钥转换为字节数组,使用
[System.Text.Encoding]::UTF8.GetBytes()方法完成转换。 - 确保密钥字节数组长度符合AES加密要求:必须是16、24或32字节(对应AES-128、AES-192、AES-256算法),原密钥长度不符合,需调整密钥字符串到对应长度。
修正后的完整代码
param ( [string]$NewPassword ) # 定义符合32字节长度的密钥字符串(对应AES-256) $keyString = "ThisIsMy32ByteEncryptionKey12345678" # 将字符串转换为字节数组 $key = [System.Text.Encoding]::UTF8.GetBytes($keyString) $encryptedPassword = ConvertTo-SecureString $NewPassword -Key $key Set-ADAccountPassword -Identity $env:USERNAME -NewPassword $encryptedPassword -Reset $path = "n:\logs\pwtracker.txt" # 加密存储时需指定相同密钥,否则后续无法正确解密 $encryptedPassword | ConvertFrom-SecureString -Key $key | Out-File $path -Append
关键注意事项
- 若坚持使用原密钥字符串,可截取其前16字节(AES-128)来满足要求:
$key = [System.Text.Encoding]::UTF8.GetBytes("ThisIsMyEncryptionKey1234")[0..15],但优先推荐使用长度合规的密钥。 - 后续解密密码时,必须使用相同的密钥字节数组,否则无法还原原始密码。
内容的提问来源于stack exchange,提问作者JerryP
相关产品推荐
相关产品推荐

