Powershell字节数组转换为十六进制

yzuktlbb  于 2023-01-05  发布在  Shell
关注(0)|答案(3)|浏览(275)

我有以下字节数组,我想获取十六进制格式,以便使用aes-256-ecb解密加密字符串。(如果您在ConvertFrom-SecureString函数中指定密钥参数,PowerShell将使用AES加密)
为了检查这一点,我使用openssl验证:

echo 'mysecretdata' | openssl enc -d -aes-256-ecb -K 303534303438303439303939303438303938303937303435303530303530303937303537303435303439303439303130310a
    • 十六进制字符串太长,十六进制密钥值无效**

我错过了什么?

anhgbhbe

anhgbhbe1#

可以对每个字节使用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 ''

(If这是你真正的密钥,你可能希望避免再次使用它,既然它是公开的;- ))

piztneat

piztneat2#

如果可以使用连字符,可以使用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

逗号操作符(,)确保您的字节数组(或可转换为该数组的对象)按原样传入(通过ForEach-Object ( % )在一个1元素数组上运行脚本块),而不是迭代。
如果这是不可避免的,那么后一个示例使用点源操作符(.)、脚本块和数组子表达式操作符(@( ))从$input自动函数变量(一个IEnumeratornotIEnumerable)中收集元素,并生成一个ToString满意的数组。

az31mfrm

az31mfrm3#

这是将字节数组转换为HexString的通用方法:

$array  = [byte[]](1..15)
$hexbin = [System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary]::new()
$hexbin.Value = $array
$hexbin.ToString()

给出以下结果:010月20日星期三
在你最初的问题中我根本没有看到数组,但是AES256密钥必须是32字节长(用64个字符的十六进制字符串表示)。

相关问题