строка с преобразованием специальных символов - PullRequest
1 голос
/ 16 февраля 2012

Я знаю, что это очень глупая проблема, так как я все еще новичок.

Случай:
Строка A: строка вывода из алгоритма шифрования (содержит специальные символы)
Строка B: выходная строка из хеш-функции строки A (содержит специальные символы)

String C = A + "|" + B;

Проблема:
Я хочу отправить их вместе от отправителя в виде строкиC, чтобы я мог отделить их в приемнике
Но строка A & B может содержать мой разделитель "|"

Так что вы предлагаете мне?[C #]

Ответы [ 3 ]

6 голосов
/ 16 февраля 2012

Одним из вариантов может быть преобразование вывода из инструмента шифрования (который, как мы надеемся, возвращает необработанные байты) во что-то вроде Base64 с использованием функции Convert.ToBase64String, которая должна быть безопасной для использования «|»с.Хотя вы теряете эффективность использования пространства, поскольку Base64 тратит много места, но если вы работаете с небольшими данными, все будет в порядке.

Если ваш код шифрования не возвращает / не может возвращать байты, высначала нужно преобразовать его в байты, используя соответствующий кодировщик, например Encoding.ASCII.GetBytes (), если ваша строка в кодировке ASCII.

//On the sender side
byte[] bytesA = Encoding.Default.GetBytes(A);
byte[] bytesB = Encoding.Default.GetBytes(B);
string encA = Convert.ToBase64String(bytesA);
string encB = Convert.ToBase64String(bytesB);

string C = encA + "|" + encB;

//On the receiver side
string[] parts = C.Split('|');
string A = Encoding.Default.GetString(Convert.FromBase64String(parts[0]));
string B = Encoding.Default.GetString(Convert.FromBase64String(parts[1]));
3 голосов
/ 16 февраля 2012

Вы можете кодировать длину первой строки в первых 3 символах.Затем вы используете длину в приемнике для разделения строк.

Не красиво, но работает.

1 голос
/ 16 февраля 2012

Вы можете экранировать все каналы в строке C

например,

  • определить "=" как escape-символ (вы можете использовать "\", что будет типично, но этобудет действительно мешать вам, так как это также escape-символ для строк в c #)
  • заменить все "=" в строках A и B на "= E" (E для равных)
  • заменить все"|"в строках A и B с "= P" (P для трубы)
  • соедините их вместе с трубой

, которая гарантирует, что в вашей строке нет труб, кроме однойсоединяя A и B, но это также позволит вам разделить их на другой стороне и восстановить все существующие трубы на их прежние места.Просто измените порядок действий.

...