如何在Web应用程序中获取CngKey?

时间:2018-02-19 11:54:43

标签: c# asp.net asp.net-mvc encryption passwords

我想访问ASP.NET MVC应用程序中的命名键,但我无法访问它。

我使用powershell创建了一个密钥。请在下面找到相应的代码。

 #Create Cng Key Parameter and set its properties
    [System.Security.Cryptography.CngKeyCreationParameters] $cngKeyParameter =  [System.Security.Cryptography.CngKeyCreationParameters]::new()
    $cngKeyParameter.KeyUsage = [System.Security.Cryptography.CngKeyUsages]::AllUsages
    $cngKeyParameter.ExportPolicy = [System.Security.Cryptography.CngExportPolicies]::AllowPlaintextExport

    $cngKeyParameter.Provider = [System.Security.Cryptography.CngProvider]::MicrosoftSoftwareKeyStorageProvider
    $cngKeyParameter.UIPolicy = [System.Security.Cryptography.CngUIPolicy]::new([System.Security.Cryptography.CngUIProtectionLevels]::None)
    $cngKeyParameter.KeyCreationOptions = [System.Security.Cryptography.CngKeyCreationOptions]::MachineKey

    #Create Cng Property for Length, set its value and add it to Cng Key Parameter
    [System.Security.Cryptography.CngProperty] $cngProperty = [System.Security.Cryptography.CngProperty]::new($cngPropertyName, [System.BitConverter]::GetBytes(2048), [System.Security.Cryptography.CngPropertyOptions]::None)
    $cngKeyParameter.Parameters.Add($cngProperty)

    #Create Cng Key for given $keyName using Rsa Algorithm
    [System.Security.Cryptography.CngKey] $key = [System.Security.Cryptography.CngKey]::Create([System.Security.Cryptography.CngAlgorithm]::Rsa, "ExampleKeyName", $cngKeyParameter)

    Write-Output "CNG Key : ExampleKeyName - Created"

密钥已成功创建,但使用以下代码无法访问Web应用程序中的相同密钥。

CngKey.Exists("ExampleKeyName")

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

CngKey.Exists("ExampleKeyName")尝试查找用户级密钥,而PowerShell脚本会创建计算机级密钥。所以你需要检查:

CngKey.Exists(
   "ExampleKeyName",
   CngProvider.MicrosoftSoftwareKeyStorageProvider, 
   CngKeyOpenOptions.MachineKey
);