我正在试图弄清楚下面报告的代码是如何工作的。
$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。
答案 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端口进行加密。