vonPryz разумно предлагает просто сохранить хеш непосредственно в виде строки (REG_SZ
) в реестре.
Если вы действительно хотите сохранить данные кактип REG_BINARY
, т. е. в виде массива байтов , вы должны конвертировать туда и обратно между строковыми представлениями.
В конвертировать в a [byte[]]
массив (с использованием сокращенной выборочной строки хэша):
PS> [byte[]] -split ('F54429' -replace '..', '0x$& ')
245 # 1st byte: decimal representation of 0xF5
68 # 2nd byte: decimal representation of 0x44
41 # ...
Выше приведено выходное представление PowerShell по умолчанию для результирующего массива
[byte[]] (0xf5, 0x44, 0x29)
.
преобразовать из a [byte[]]
массив (обратно в строку; синтаксис PSv4 +):
PS> -join ([byte[]] (0xf5, 0x44, 0x29)).ForEach('ToString', 'X')
F54429
.ForEach('ToString', 'X')
эквивалентно вызову .ToString('X')
то есть, запрашивая представление hex - для каждого элемента массива и собирая полученную строку.-join
затем соединяет эти строки в одну строку путем прямой конкатенации.
Чтобы сложить все вместе:
# Sample hash string.
$hashString = 'F54429'
# Convert the hash string to a byte array.
$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
# Create a REG_BINARY registry value from the byte array.
Set-ItemProperty -LiteralPath HKCU:\ -Name tmp -Type Binary -Value $hashByteArray
# Read the byte array back from the registry (PSv5+)
$hashByteArray2 = Get-ItemPropertyValue -LiteralPath HKCU:\ -Name tmp
# Convert it back to a string.
$hashString2 = -join $hashByteArray2.ForEach('ToString', 'X2')
# (Clean up.)
Remove-ItemProperty -LiteralPath HKCU:\ -Name tmp