PowerShell ConvertTo-Securestring

PowerShell ConvertTo-Securestring

提问人:Buchi Ani 提问时间:11/10/2023 最后编辑:James ZBuchi Ani 更新时间:11/11/2023 访问量:57

问:

我是 powershell 的新手,所以请耐心等待我。

我正在努力创建一个脚本,该脚本可以在 PowerShell 中生成密码以导出 PFX 证书。首先,我调用了新函数来生成密码,如下所示

function Generate-RandomPassword{
    param (
        [Parameter(Mandatory)]
        [int] $length
    )
    #$charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}+[]*=:()$^%;_!&#?>.'.ToCharArray()
    $charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.ToCharArray()
    $rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
    $bytes = New-Object byte[]($length)
    $key = New-Object Byte[] 16
    $rng.GetBytes($bytes)
    $result = New-Object char[]($length)
    for ($i = 0 ; $i -lt $length ; $i++) {
        $result[$i] = $charSet[$bytes[$i]%$charSet.Length]
    }
    return (-join $result)
}

然后我曾经生成密码并将随机密码通过管道传送到文件系统进行存储,这工作正常Generate-RandomPassword 16 | Set-Content -Path C:\PFX\certs\PASSWORD.txt

其次,我打算使用变量来存储我打算导出的证书的公用名。这指定了 CERT:逻辑驱动器、计算机帐户,然后是个人身份存储,然后此处的参数指示我使用以下命令将目标为 CN$CertfilePath-dnsname

$CertFilePath = Get-ChildItem -Path Cert:LocalMachine\MY -dnsname *TARGET*

最后,我希望能够接受管道输入,但是该参数是必需的,并且是这里的症结所在,它是用于转换明文的字节的 #:128、192 或 256 位是有效选项。请注意,整数降低到 16,16*8=正好是 128 位。我试图缩短它以实现兼容性以适应 128 的字节数组长度,但是关于我如何填充此键值的某些内容不正确,如下所示ConvertTo-SecureString-keyGenerate-RandomPassword

$PfxExportPassword = get-content -path C:\PFX\certs\PASSWORD.txt | ConvertTo-SecureString -key 32

当我运行上述操作时,我收到以下错误

ConvertTo-SecureString:指定的密钥无效。有效的密钥长度设置为 128 位、192 位或 256 位。 在行:1 字符:80

PowerShell 钥匙 PFX的 安全字符串

评论

2赞 TheMadTechnician 11/10/2023
对我来说似乎很简单,接受 128、192 或 256 的值,而你给了它 32。-key
1赞 Mathias R. Jessen 11/10/2023
您希望通过将密码字符串转换为实例来实现什么?是因为你需要把它传递给吗?SecureStringExport-PfxCertificate
0赞 iRon 11/10/2023
试试这个:github.com/iRon7/New-Password$PfxExportPassword = New-Password -Length 16 -AsSecureString

答:

0赞 Alin Ciovica 11/10/2023 #1

尝试将其导出为-AsPlainText,然后查看Export-PfxCertificate是否接受$PfxExportPassword作为密码参数。

$PfxExportPassword = Get-Content -Path C:\PFX\certs\PASSWORD.txt | ConvertTo-SecureString -AsPlainText -Force