带特殊字符转换的字符串

时间:2012-02-16 19:45:58

标签: c# string special-characters string-conversion

我知道这是一个非常愚蠢的问题,因为我还是新手。

案例:
字符串A:来自加密算法的输出字符串(包含特殊字符)
字符串B:来自字符串A的哈希函数的输出字符串(包含特殊字符)

String C = A + "|" + B;

问题:
我想将它们从发送者一起发送到字符串C,以便我可以在接收器中将它们分开 但字符串A& B可能包含我的分隔符“|”

那么你对我有什么建议? [C#]

3 个答案:

答案 0 :(得分:6)

一种选择是使用Convert.ToBase64String函数将加密工具的输出(希望返回原始字节)转换为Base64,这应该是安全的“|”用。你失去了空间效率,因为Base64浪费了大量的空间,但如果你处理的是小数据,你就可以了。

如果您的加密代码执行/不能返回字节,则必须首先使用适当的编码器将其转换为字节,即如果您的字符串采用ASCII编码,则为Encoding.ASCII.GetBytes()。

//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]));

答案 1 :(得分:3)

您可以在前3个字符中输入第一个字符串的长度。然后使用接收器处的长度来分割字符串。

不漂亮,但有效。

答案 2 :(得分:1)

您可以转义字符串C

中的所有管道

e.g。

  • 定义" ="作为一个转义字符(你可以使用" \",这将是典型的,但这将真的搞砸你,因为它也是c#中字符串的转义字符)
  • 全部替换" ="字符串A和B中的" = E" (E代表Equals)
  • 全部替换" |"在字符串A和B中," = P" (管道为P)
  • 将它们与管道连接起来

这将保证您的字符串中没有管道,除了连接A和B的管道,但它也允许您在另一侧拆分它们并将所有现有管道恢复到其原始位置。只需颠倒操作顺序。