Получение исключения «Ключ недопустим для использования в указанном состоянии» при расшифровке файла - PullRequest
1 голос
/ 03 марта 2020

Я создаю сертификат и шифрую этот сертификат в виде файла 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();
            }

Когда я запускаю код, я получаю Исключение как «Ключ недопустим для использования в указанном состоянии» в строке, где я пытаюсь расшифровать. Это работает нормально, если я пытаюсь расшифровать с помощью команды powershell. Любая помощь приветствуется. Примечание. Я дал разрешение на чтение файла.

1 Ответ

5 голосов
/ 03 марта 2020

ProtectedData использует DPAPI для защиты данных. Это означает, что вы можете зашифровать / расшифровать данные на одном компьютере, но не можете зашифровать на одном компьютере и расшифровать на другом компьютере, потому что у каждого компьютера есть свой собственный главный ключ DPAPI. Если вам нужно работать с зашифрованными данными на разных компьютерах, вы не можете использовать DPAPI. Вместо этого вы должны использовать другие средства для шифрования и дешифрования данных. Например, вы можете использовать AES class.

...