2015-05-20 3 views
4

Я использую командлет , который создает System.IO.MemoryStream, который содержит ключ шифрования, который мне нужно использовать для шифрования некоторых файлов.Как я могу прочитать из потока памяти свойства «Plaintext», возвращаемого New-KMSDataKey?

Это документация для команды:

http://docs.aws.amazon.com/powershell/latest/reference/items/New-KMSDataKey.html

И это объект, который возвращается этого командлета:

http://docs.aws.amazon.com/sdkfornet/latest/apidocs/items/TKeyManagementServiceGenerateDataKeyResult_NET3_5.html

Я пытаюсь получить имущество plaintext. Как получить доступ к System.IO.MemoryStream, чтобы получить ключ?

Это мой пример сценария:

$KMSKeyS3 = New-KMSDataKey -KeyId $KMSKeySource -KeySpec AES_256 -Region "ap-southeast-2" 

Это дает мне:

CiphertextBlob   KeyId           Plaintext             
--------------   -----           --------- 
System.IO.MemoryStream arn:aws:kms:ap-southeast-2:<Customer>:key/<Key> System.IO.MemoryStream 
+1

Вы можете прочитать [System.IO.MemoryStream] с помощью StreamReader '$ reader = new-object System.IO.StreamReader ($ KMSKeyS3.plaintext); $ reader.Readline() 'Но это всего лишь половина ответа, потому что я понятия не имею, что такое кодировка в этом MemoryStream. –

+0

Документация о том, как обращаться с этим свойством, в частности, кажется довольно скудной. Вы можете захотеть отбросить это на форумах AWS Powershell, чтобы получить конкретное слово об использовании от сотрудника AWS. –

+0

Убрал вопрос и проголосовал за повторное открытие. Этот вопрос очень специфичен и отвечает тем, у кого есть опыт работы с командлетами KMS. Я не думаю, что это просто широкий вопрос о потоках памяти, но особенно это использование одного. @Chris, вы можете отредактировать сообщение, чтобы включить некоторую релевантную информацию, такую ​​как командлеты KMS, которые вы использовали для создания любых связанных ключей, псевдонимов и т. Д. –

ответ

0

Короче говоря,

# generate a data key 
$KMSKeyS3 = New-KMSDataKey -KeyId $KMSKeySource -KeySpec AES_256 -Region "ap-southeast-2" 

[byte[]]$plaintextDataKey = $KMSKeyS3.Plaintext.ToArray() 
[byte[]]$encryptedDataKey = $KMSKeyS3.CiphertextBlob.ToArray() 
[string]$encryptedDatakeyBase64 = $([Convert]::ToBase64String($encryptedDataKey)) 

См this answer to a question on PowerShell and KMS всеобъемлющего ответа, включая тестируемых шифрования и дешифрования сценариев , и base64.