Как конвертировать из string в byte

    Random random = new Random();
    byte[] RandomKey = new byte[32];
    string RandomKeyString = "0x";
    for (int i = 0; i < 32; i++)
    {
        if (random.Next(0, 2) == 0)
        {
            RandomKeyString += random.Next(0, 11).ToString();
        }
        else
        {
            RandomKeyString += letter[random.Next(0, 26)];
        }
        if (random.Next(0, 2) == 0)
        {
            RandomKeyString += random.Next(0, 11).ToString();
        }
        else
        {
            RandomKeyString += letter[random.Next(0, 26)];
        }
        RandomKey[i] = RandomKeyString;
    }

На выходе из переменной RandomKeyString должно получится что-то похожее на 0xFF или 0x5E нужно записать в переменную RandomKey значение из RandomKeyString.


Ответы (2 шт):

Автор решения: Aziz Umarov

Да судя по задаче у автора жгучее желание перевода строки в byte array, Но думаю что тут возможно дело в другом. Почему то у автора генерация каждого байта не много отходит от стандартов понимания этих данных.

  1. Если есть необходимость сгенерировать псевдослучайной массив байтов, то Random.NextBytes
  2. Если нужно этот массив байтов увидеть т в Hex то ссылка тут

В любом случае генерировать число, потом переводить сгенерированое число в строку а затем пытаться перевести строку в byte. Показывает лишь что автор не много запутался в задаче и потерял мысль которая была изначально. Но конечно это возможно лишь мои предложения и я ошибаюсь. Но если оно так прошу не судить строго. Пытаюсь лишь помочь автору.

→ Ссылка
Автор решения: aepot

Генерировать ключи шифрования с помощью Random категорически нельзя, так как этот PRNG не является криптостойким. Для генерации криптографических артефактов, состоящих из рандомных байт есть RandomNumberGenerator из пространства имён System.Security.Cryptography.

А делается это так:

var rng = RandomNumberGenerator.Create();
byte[] randomKey = rng.GetBytes(32);

Получим массив 32 случайных байта.

Если надо вывести в строку в HEX формате:

string hex = Convert.ToHexString(randomKey);

Вообще 0xFF это не 1 байт. Это строка, текстовое представление одного байта. Не путайтесь. 1 байт - это число типа byte от 0 до 255.

Но вообще классы, представляющие алгоритмы шифрования, генерят ключи автоматически. Например:

using Aes aes = Aes.Create();
byte[] key = aes.Key; // это будет новый сгенерированный ключ

Больше примеров тут.


А если прямо отвечать на вопрос, то так:

randomKey[i] = Convert.FromHexString(randomKeyString[2..])[0];

локальные переменные в C# принято называть с маленькой буквы.

→ Ссылка