有关ConvertFrom-SecureString的信息

时间:2017-03-22 15:41:28

标签: .net powershell encryption

我正在试图弄清楚下面报告的代码是如何工作的。

$number =+313331234568
$key = [System.Text.Encoding]::Unicode.GetBytes('9999b9bc-99a9-99e9-b999-999f9a999c9d')
$s = ConvertTo-SecureString -String $number -AsPlainText -Force | ConvertFrom-SecureString -Key $key[1..32]
return $s

请您帮我理解如何编写报告的作品?

对于从Write-Host $key获得的字节数组使用密钥后括号中的值的方式不太清楚,这是输出:

57 0 57 0 57 0 57 0 98 0 57 0 98 0 99 0 45 0 57 0 57 0 97 0 57 0 45 0 57 0 57 0 101 0 57 0 45 0 98 0 57 0 57 0 57 0 45 0 57 0 57 0 57 0 102 0 57 0 97 0 57 0 57 0 57 0 99 0 57 0 100 0
PS C:\Users\admin> Write-Host $key
57 0 57 0 57 0 57 0 98 0 57 0 98 0 99 0 45 0 57 0 57 0 97 0 57 0 45 0 57 0 57 0 101 0 57 0 45 0 98 0 57 0 57 0 57 0 45 0 57 0 57 0 57 0 102 0 57 0 97 0 57 0 57 0 57 0 99 0 57 0 100 0
PS C:\Users\admin> $keym = (57 ,57 ,57 ,57 ,98 ,57 ,98 ,99 ,45 ,57 ,57 ,97 ,57 ,45 ,57 ,57 ,101 ,57 ,45 ,98 ,57 ,57 ,57 ,45 ,57 ,57 ,57 ,102 ,57 ,97 ,57 ,57 ,57 ,99 ,57 ,100)
PS C:\Users\admin> $s = ConvertTo-SecureString -String $number -AsPlainText -Force | ConvertFrom-SecureString -Key $keym
ConvertFrom-SecureString : Valore key non valido. La lunghezza valida per key deve essere 128 bit, 192 bit o 256 bit.
In riga:1 car:67
+ ... ing $number -AsPlainText -Force | ConvertFrom-SecureString -Key $keym
+                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [ConvertFrom-SecureString], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

我想应用相同的解密/加密,但在Unix上使用OpenSSL。

1 个答案:

答案 0 :(得分:0)

$number =+313331234568

这只是定义一个数字。 +毫无意义,也可以删除。

$key = [System.Text.Encoding]::Unicode.GetBytes('9999b9bc-99a9-99e9-b999-999f9a999c9d')

这会将带有UUID的Unicode字符串转换为字节数组。字符'9'将转换为2个字节,其中(整数)值为57和0,等等。

ConvertTo-SecureString -String $number -AsPlainText -Force | ...

这会将数字从头开始转换为安全字符串。

... | ConvertFrom-SecureString -Key $key[1..32]

尝试将安全字符串从之前转换为(仍然加密的)ASCII表示,使用$key中存储的字节数组中的第2到第33字节作为加密密钥。这是为了使加密独立于安全字符串将被绑定的主机和用户,以便导出的数据可以由任何知道密钥($key[1..32])的用户导入到任何主机上。 ..是PowerShell的范围运算符,它生成一系列以第一个操作数(1)开头并以第二个操作数(32)结束的数字。 []运算符返回与给定索引([1, 2, ..., 32])匹配的所有数组元素。

您在示例中遇到的错误是因为您尝试使用36字节密钥加密数据。允许的只有16字节(128位),24字节(192位)和32字节(256位)。

导出的数据与OpenSSL,BTW不兼容。如果要在Unix主机上使用OpenSSL解密数据:使用OpenSSL的Windows端口进行加密。