有人可以帮我解决以下问题。 我使用PowerShell,到目前为止,我已经想出了如何获取X509证书平面文件,例如Cert.cer并将其标记为Base64字符串以进行存储(例如,在数据库中作为字符串等),然后将其再次转换回System.Security.Cryptography.X509Certificates.X509Certificate2对象
到目前为止看到我的代码
$CertifcateFileFullPath = "C:\temp\cert.cer"
$Cert = new-object security.cryptography.x509certificates.x509certificate2 -ArgumentList $CertifcateFileFullPath
$Obj2 = [System.Convert]::ToBase64String($Cert.RawData)
$Obj3 = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert]::FromBase64String($Obj2))
现在问题是我想将对象$ obj3作为平面文件(例如Cert.cer)写回文件系统,该文件可读/可用作原始证书。如果我使用| out-file C:\ Temp2 \ Cert.cer等...我得到一个比原始文件大得多且不可读的文件(例如,不作为普通的证书文件打开)。我假设在将对象写入文件系统时编码是个问题(我相信证书文件是ASN 1编码二进制文件)
有人可以帮助我实现这一目标,提前谢谢。
E Brant
答案 0 :(得分:0)
问题是PewrShell默认是Unicode,而CryptoAPI解码器需要ASCII编码(其中每个字符使用一个字节编码)。为此,请将-Encoding ASCII
参数添加到Out-File
cmdlet。