读取位于C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys中的密钥文件

时间:2019-11-25 16:17:28

标签: c# cryptography rsa

我们创建的一个实用程序在C:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys中生成了太多文件。为了安全地删除这些文件,我想打开每个文件并检查密钥。如何在C#中打开这些密钥文件?我在here看过代码。该代码仅返回公共密钥。我可以从这些密钥文件中获取更多信息吗?

1 个答案:

答案 0 :(得分:0)

我最终使用以下Powershell从证书存储中获取有效密钥的列表。由于我正在使用IIS服务,因此我还将c2319c42033a5ca7f44e731bfd3fa2b5添加到了列表中。我删除了不在此列表中的任何密钥文件。

 $MachineCertStores = Get-ChildItem Cert:\LocalMachine
$UserCertStores = Get-ChildItem Cert:\CurrentUser

Foreach ($Store in $MachineCertStores)
{
    $path = "Cert:\LocalMachine\" + $($store.Name)
    $keys = Get-ChildItem $path
    Foreach ($Key in $Keys)
        {
        $UniqueKeyName = $key.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
        if ([string]::IsNullOrWhitespace($UniqueKeyName)){
        }else{
            write-host $UniqueKeyName
            $file = Get-Content "validkey.txt"
            $containsWord = $file | %{$_ -match $UniqueKeyName.substring(0,32)}
            If($containsWord -contains $true)
            {
            }else{
                $UniqueKeyName.substring(0,32) | Out-File 'validkey.txt' -Append
            }
        }
    }
}

Foreach ($Store in $UserCertStores)
{
    $path = "Cert:\CurrentUser\" + $($store.Name)
    $keys = Get-ChildItem $path
    Foreach ($Key in $Keys)
        {
        $UniqueKeyName = $key.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
        if ([string]::IsNullOrWhitespace($UniqueKeyName)){
        }else{
            write-host $UniqueKeyName
            $file = Get-Content "validkey.txt"
            $containsWord = $file | %{$_ -match $UniqueKeyName.substring(0,32)}
            If($containsWord -contains $true)
            {
            }else{
                $UniqueKeyName.substring(0,32) | Out-File 'validkey.txt' -Append
            }
        }
    }
}