Как зашифровать XML-контент с помощью заданного ключа AES в Powershell - PullRequest
0 голосов
/ 18 января 2019

Мне нужно использовать API поставщика для автоматического создания заявок в службу поддержки. API требует XML-содержимого, зашифрованного с помощью данного ключа AES. Как я могу это сделать? У меня проблемы со следующим кодом.

$xml =
'
<Service>
    <Action>SubmitTicket</Action>
    <UserName>xxx@xxx.com</UserName>
    <Case>
        <Title>Title</Title>
        <Description>Description</Description>
        <ProductName>ProductName</ProductName>
        <ProductVersion>1.0</ProductVersion>
        <ProductLanguage>English</ProductLanguage>
    <Purpose>Support</Purpose>
    </Case>
</Service>
'

$Key = '!QeRs6%x2RXzk6ab' (fake but similar one)

$secureString = ConvertTo-SecureString $xml -AsPlainText -Force
$encrypted_xml = ConvertFrom-SecureString $secureString -SecureString $key

Я получаю следующую ошибку.

ConvertFrom-SecureString : Cannot bind parameter 'Key'. Cannot convert value 
"!QeRs6%x2RXzk6ab" to type "System.Byte". Error: "Input string was not in a 
correct format." At C:\Users\user\Desktop\Powershell\API_Submitter.ps1:39 
char:62 + $EncryptedInfo = ConvertFrom-SecureString $secureSTring -Key $key
+ CategoryInfo: InvalidArgument: (:) [ConvertFrom-SecureString], 
ParameterBindingException + FullyQualifiedErrorId : 
CannotConvertArgumentNoMessage, 
Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

1 Ответ

0 голосов
/ 18 января 2019

Параметр Key для ConvertFrom-SecureString должен быть массивом Byte, а не строкой. Вы можете использовать GetBytes для достижения этого: (я предполагаю UTF8 кодирование)

$Key = [System.Text.Encoding]::UTF8.GetBytes('!QeRs6%x2RXzk6ab')

Укажите имена параметров в вызове:

$encrypted_xml = ConvertFrom-SecureString -SecureString $secureString -Key $key
...