Я пытаюсь преобразовать восстановленное значение реестра с object
в byte[]
. Он хранится как REG_BINARY
. Я пробовал использовать BinaryFormatter
с MemoryStream
. Однако он добавляет служебную информацию, которую я не хочу. Я заметил это, когда я преобразовал массив байтов в строку, выполнив функцию Convert.ToBase64String(..)
. Я выполняю эти функции, потому что проверяю хранение и извлечение зашифрованного ключа в реестре.Преобразование объекта в байт []
0
A
ответ
7
Если это REG_BINARY то он уже должен быть байтовый массив при извлечении его ... вы не можете просто бросить его byte[]
?
В качестве альтернативы, если вы еще не проверены, что это REG_BINARY в коде, вы можете использовать:
byte[] binaryData = value as byte[];
if (binaryData == null)
{
// Handle case where value wasn't found, or wasn't binary data
}
else
{
// Use binaryData here
}
0
Если вы конвертировали его с помощью Convert.ToBase64String, вы также сможете получить его.
string regValueAsString = (string)regValueAsObj;
byte[] buf = Convert.FromBase64String(regValueAsString);
5
Попробуйте это. Если это уже REG_BINARY, все, что вам нужно сделать, это отличить его:
static byte[] GetFoo()
{
var obj = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\Software", "foo", null);
//TODO: Write a better exception for when it isn't found
if (obj == null) throw new Exception();
var bytearray = obj as byte[];
//TODO: Write a better exception for when its found but not a REG_BINARY
if (bytearray == null) throw new Exception();
return bytearray;
}
Хорошо, да, это ответ. Я не использовал C# через некоторое время, поэтому, очевидно, я ржавый. Спасибо за сообщение очевидного ответа :) –