簡體   English   中英

具有特殊字符轉換的字符串

[英]string with special characters conversion

我知道這是一個非常愚蠢的問題,因為我仍然是新手。

案件 :
字符串A:加密算法的輸出字符串(包含特殊字符)
字符串B:字符串A的哈希函數的輸出字符串(包含特殊字符)

String C = A + "|" + B;

問題:
我想將它們作為字符串C從發送方一起發送,以便可以在接收方中將它們分開
但是字符串A和B可能包含我的分隔符“ |”

那你對我有什么建議? [ C# ]

一種選擇是使用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]));

您可以在前3個字符中刪除第一個字符串的長度。 然后,使用接收器上的長度來分割字符串。

不漂亮,但是有效。

您可以將字符串C中的所有管道轉義

例如

  • 定義“ =”作為轉義字符(您可以使用“ \\”,這很典型,但是由於它也是c#中字符串的轉義字符,因此確實會惹上您)
  • 將字符串A和B中的所有“ =”替換為“ = E”(E等於)
  • 替換所有“ |” 在字符串A和B中使用“ = P”(對於管道,P)
  • 用管道將它們連接在一起

這樣可以確保您的字符串中除了連接A和B的管道之外沒有其他管道,但也可以讓您在另一側拆分管道並將所有現有管道恢復到其原始位置。 只需顛倒操作順序即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM