解密文件时出现异常 "Key not valid for use in specified state"
Getting Exception "Key not valid for use in specified state" while decrypting a file
我正在生成证书并将该证书作为 bin 文件加密到本地磁盘。
我正在使用以下 powershell 代码执行此操作:
$bytes = $CertificateResponse.ToCharArray() | % {[byte] $_}
[Byte[]]$entropy = 4,17,9,88,236,1688,1486,41,182,16,72,93,2,188,2,23
# Encrypt the byte array.
$encryptedBytes = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::LocalMachine)
$encryptedBytes | Set-Content C:\certificate\xxx.bin -Encoding Byte
后来相同的二进制文件保存在其他机器上,我正在尝试按如下方式读取和解密文件(使用 c#):
try
{
this.EntropyKey = new byte[] { 4,17,9,88,236,1688,1486,41,182,16,72,93,2,188,2,23};
var data = File.ReadAllBytes(Path.Combine(localPath, "xxx.bin"));
var decryptedData = ProtectedData.Unprotect(data, this.EntropyKey, DataProtectionScope.LocalMachine);
this.Certificate = new X509Certificate(decryptedData);
return Task.CompletedTask;
}
catch (Exception ex)
{
throw new NotImplementedException();
}
当我 运行 代码时,我在尝试解密的那一行收到异常 "Key not valid for use in specified state"。
如果我尝试使用 powershell 命令解密,它工作正常。任何帮助将非常感激。
注意:我已授予文件读取权限。
ProtectedData
使用 DPAPI 来保护数据。这意味着你可以encrypt/decrypt同一台机器上的数据,但不能在一台机器上加密并在另一台机器上解密,因为每台机器都有自己的DPAPI主密钥。如果您需要在不同的机器上处理加密数据,则不能使用 DPAPI。相反,您必须使用其他方式来加密和解密数据。例如,您可以使用 AES class.
我正在生成证书并将该证书作为 bin 文件加密到本地磁盘。 我正在使用以下 powershell 代码执行此操作:
$bytes = $CertificateResponse.ToCharArray() | % {[byte] $_}
[Byte[]]$entropy = 4,17,9,88,236,1688,1486,41,182,16,72,93,2,188,2,23
# Encrypt the byte array.
$encryptedBytes = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::LocalMachine)
$encryptedBytes | Set-Content C:\certificate\xxx.bin -Encoding Byte
后来相同的二进制文件保存在其他机器上,我正在尝试按如下方式读取和解密文件(使用 c#):
try
{
this.EntropyKey = new byte[] { 4,17,9,88,236,1688,1486,41,182,16,72,93,2,188,2,23};
var data = File.ReadAllBytes(Path.Combine(localPath, "xxx.bin"));
var decryptedData = ProtectedData.Unprotect(data, this.EntropyKey, DataProtectionScope.LocalMachine);
this.Certificate = new X509Certificate(decryptedData);
return Task.CompletedTask;
}
catch (Exception ex)
{
throw new NotImplementedException();
}
当我 运行 代码时,我在尝试解密的那一行收到异常 "Key not valid for use in specified state"。 如果我尝试使用 powershell 命令解密,它工作正常。任何帮助将非常感激。 注意:我已授予文件读取权限。
ProtectedData
使用 DPAPI 来保护数据。这意味着你可以encrypt/decrypt同一台机器上的数据,但不能在一台机器上加密并在另一台机器上解密,因为每台机器都有自己的DPAPI主密钥。如果您需要在不同的机器上处理加密数据,则不能使用 DPAPI。相反,您必须使用其他方式来加密和解密数据。例如,您可以使用 AES class.