1

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

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

String C = A + "|" + B;

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

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

4

3 回答 3

6

一种选择是使用 Convert.ToBase64String 函数将加密工具的输出(希望返回原始字节)转换为 Base64 之类的东西,使用“|”应该是安全的 和。但是,您会失去空间效率,因为 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]));
于 2012-02-16T19:54:51.070 回答
3

您可以在前 3 个字符中对第一个字符串的长度进行 enode。然后你使用接收器的长度来分割字符串。

不漂亮,但有效。

于 2012-02-16T19:56:19.927 回答
1

您可以转义字符串 C 中的所有管道

例如

  • 将“=”定义为转义字符(您可以使用“\”,这很典型,但这真的会让您感到困惑,因为它也是 c# 中字符串的转义字符)
  • 将字符串 A 和 B 中的所有“=”替换为“=E”(E 表示等于)
  • 替换所有“|” 在带有“=P”的字符串 A 和 B 中(P 表示管道)
  • 用管道将它们连接在一起

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

于 2012-02-16T19:55:23.813 回答