Если у вас есть символ char
, вы можете преобразовать его в целое число int
.
И затем вы можете использовать оператор ^
для выполнения операции XOR. Похоже, вы не используете этот оператор в данный момент, что может быть источником вашей проблемы.
string EncryptOrDecrypt(string text, string key)
{
var result = new StringBuilder();
for (int c = 0; c < text.Length; c++)
result.Append((char)((uint)text[c] ^ (uint)key[c % key.Length]));
return result.ToString();
}
Такого рода вещи. Вот более длинная версия с комментариями, которая делает то же самое шаг за шагом, чтобы было легче учиться:
string EncryptOrDecrypt(string text, string key)
{
var result = new StringBuilder();
for (int c = 0; c < text.Length; c++)
{
// take next character from string
char character = text[c];
// cast to a uint
uint charCode = (uint)character;
// figure out which character to take from the key
int keyPosition = c % key.Length; // use modulo to "wrap round"
// take the key character
char keyChar = key[keyPosition];
// cast it to a uint also
uint keyCode = (uint)keyChar;
// perform XOR on the two character codes
uint combinedCode = charCode ^ keyCode;
// cast back to a char
char combinedChar = (char)combinedCode;
// add to the result
result.Append(combineChar);
}
return result.ToString();
}
Краткая версия такая же, но с удаленными промежуточными переменными, подстановка выражений непосредственно в место их использования.