Powershell字节数组为十六进制

时间:2017-09-19 13:13:53

标签: arrays powershell encryption byte

我有以下字节数组,我想获取十六进制格式,以便使用aes-256-ecb解密加密字符串。 (如果在" ConvertFrom-SecureString"函数中指定关键参数,powershell将使用AES加密)

为了检查这一点,我使用openssl验证:

回声' mysecretdata' | openssl enc -d -aes-256-ecb -K 303534303438303439303939303438303938303937303435303530303530303937303537303435303439303439303130310a

十六进制字符串太长 无效的十六进制密钥值

我错过了什么?

感谢。

3 个答案:

答案 0 :(得分:7)

您可以在每个字节上使用X2格式字符串来获取它的十六进制表示,然后使用-join运算符来连接字符串:

$bytes = 0,54,0,48,0,49,0,99,0,48,0,98,0,97,0,45,0,50,0,50,0,97,0,57,0,45,0,49,0,49,0,101
$hexString = ($bytes|ForEach-Object ToString X2) -join ''

(如果这是您的实际密钥,您可能希望不再使用它,现在它是公共知识;-))

答案 1 :(得分:1)

如果可以使用连字符,可以使用string System.BitConverter::ToString(byte[] value)静态方法:

PS> $bytes = 0,7,14,21,28,35,42
PS> [System.BitConverter]::ToString($bytes)
00-07-0E-15-1C-23-2A
PS>
PS> # If you'd like to use this in a pipeline:
PS> ,$bytes | % { [System.BitConverter]::ToString($_) }
00-07-0E-15-1C-23-2A
PS>
PS> # If you can't obtain a byte[]-compatible input:
PS> $bytes | . { [System.BitConverter]::ToString(@($input)) }
00-07-0E-15-1C-23-2A

comma operator (,)确保按原样传入(通过ForEach-Object (%)在1个元素的数组上运行脚本块)字节数组(或可转换为该对象的字节数组),而不进行迭代结束。

如果这是不可避免的,则后面的示例使用dot sourcing operator (.),一个脚本块和array subexpression operator (@( ))$input自动函数变量({{3} },不是 IEnumerator),并产生ToString满意的数组。

答案 2 :(得分:0)

我认为您忘记了使用SSL证书文件中的页眉和页脚。必须将它们用于open ssl才能识别它是SSL证书。