I have the following byte array that I would like to obtain hex format in order to decrypt an encrypted string using aes-256-ecb. (PowerShell uses AES encryption if you specify key argument in ConvertFrom-SecureString
function)
In order to check this I verify by using openssl:
echo 'mysecretdata' | openssl enc -d -aes-256-ecb -K 303534303438303439303939303438303938303937303435303530303530303937303537303435303439303439303130310a
hex string is too long invalid hex key value
What am I missing?
You can use the string System.BitConverter::ToString(byte[] value)
static method if you're fine with hyphenation:
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
The comma operator (,
) makes sure that your byte array (or object castable to such) is passed in (via ForEach-Object
(%
) running the script block over a 1-element array) as it is, and not iterated over.
If that's unavoidable, then the latter example uses the dot sourcing operator (.
), a script block, and the array subexpression operator (@( )
) to collect the items from the $input
automatic function variable (an IEnumerator
, not IEnumerable
) and produce an array ToString
's happy with.
You can use the X2
format string on each individual byte to get it's hex representation, then use the -join
operator to concatenate the strings:
$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 that's your actual key, you might want to refrain from ever using it again, now that it's public knowledge ;-) )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With