Я реализую шифр Вернама. Вот метод, который отвечает за процесс шифрования:
static string[] VernamCipher(char[] _message, char[] _key)
{
string[] message = GetBinaryArray(_message);
string[] key = GetBinaryArray(_key);
// return ...
}
В качестве параметра передается строка, буквы которого записаны в массив char, и сам ключ, который тоже в виде массива char. Длинна ключа и сообщения совпадают.
Потом я создал метод GetBinaryArray:
static string[] GetBinaryArray(char[] array)
{
var ASCIIBytes = Encoding.ASCII.GetBytes(array);
var BinaryArray = new string[array.Length];
for (int i = 0; i < array.Length; i++)
{
BinaryArray[i] = (Convert.ToString(ASCIIBytes[i], 2)).PadLeft(8, '0');
}
return BinaryArray;
}
Он берёт номер значения символа в массиве по таблице ASCII и преобразует его в двоичный код. Этот код записывается в строковый массив и возвращается методом.
Теперь, я хочу выполнить операцию XOR с элементами массивов message и key.Потом перевести каждый элемент массива в десятичный код ACSII и преобразовать его в соответствующий знак.
И в конце вернуть методом этих знаков массив. То бишь, сделать эдакую инверсию того, что мы делали в методе GetBinaryArray.
Я не имею даже представления, как это можно сделать, да и вообще, можно ли операцию XOR применять со строками.
Двоичные операции реализованы над байтами, не над строками. Поэтому я бы перевёл строку в массив байт (Encoding.GetBytes
), про-xor-ил с ключом (который тоже должен быть набором байт, а не символов), и полученный массив байт был бы результатом.
Теперь, что у вас категорически неправильно. GetBinaryArray должен возвращать массив байт, а не каких-то строк. Convert.ToString
не нужно.
Затем, Encoding.ASCII — катастрофически неправильно. Ваша строка имеет право содержать символы не только английского алфавита.
Итого:
Encoding.UTF8.GetBytes(message).Zip(key, (a, b) => (byte)(a ^ b)).ToArray()
при условии, что размера ключа хватает.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Когда я открываю решение для UWP в visual studia то у меня выскакивает такой вот диалог:
Пишу программу с интерфейсом, сделал что-то подобноеВид из редактора Студии: