Вы пытаетесь использовать кодировку ASCII, но знак фунта отсутствует в ASCII. Кодировка не может иметь дело с символом, поэтому она использует закодированную форму "?" как индикатор того, что что-то не так.
Я предлагаю вам использовать вместо UTF-8. Все символы Unicode могут быть представлены в UTF-8, и это эффективно для действительно строк ASCII (которые очень распространены).
Следует помнить одну вещь: шифрование обычно работает с произвольными двоичными данными, а результат - это произвольные двоичные данные. Не пытайтесь преобразовать результаты шифрования обратно в строку, используя что-то вроде Encoding.UTF8.GetString(bytes)
- это приведет к потере данных, поскольку произвольные двоичные данные почти наверняка не будут действительными в кодировке UTF-8 последовательность символов. Если вам нужен строковый результат, используйте кодировку base64: Convert.ToBase64String(bytes)
.