2012-02-16 136 views
1

我知道這是一個非常愚蠢的問題,因爲我還是新手。特殊字符轉換字符串

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

String C = A + "|" + B; 

問題:
我想他們一起發件人發送的字符串C,這樣我可以在接收器
但S飾它們分開ng A & B可能包含我的分隔符「|」

那麼你對我的建議是什麼? [C#]

+5

爲什麼你不能將它們作爲兩個單獨的參數傳遞? – BrokenGlass 2012-02-16 19:48:56

+1

'B'具有恆定的長度嗎? – zerkms 2012-02-16 19:49:38

+1

或爲什麼你不能使用分隔符,你的加密算法永遠不會產生? – Anton 2012-02-16 19:50:34

回答

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

+!很好,我試圖寫。 – 2012-02-16 19:57:55

+0

如何轉換回來? – 2012-02-16 20:06:07

+0

輸入不是有效的Base-64字符串,因爲它包含非基本64字符,多個填充字符或填充字符中的非空白字符。 – 2012-02-16 20:19:21

1

你可以逃避所有管道在字符串C

例如

  • 定義「=」作爲轉義字符(你可以使用「\」,這將是典型的,但你真的會亂,因爲它也是一個轉義字符在C#中的字符串)
  • 全部更換「=」在字符串A和B中加上「= E」(等於E)
  • 替換全部「|」在字符串A和B「= P」(P管道)
  • 與管道將它們連接在一起

,這將保證你在你的字符串除了一個連接A和B沒有管,但它也會讓你在另一邊分開它們,並將所有現有的管道恢復到原來的位置。只是顛倒操作的順序。

+1

請注意,低效率將限制爲每個「=」和「|」的+1個字符在你的字符串中 – 2012-02-16 19:57:45

+1

如果加密算法在輸出中產生| =,他該怎麼辦?它將在另一側替換爲|。這是不正確的 – Anton 2012-02-16 19:58:24

+1

你是正確的,我創建我的迴應時錯誤鍵入...編輯它來解決問題。 – 2012-02-16 20:00:08

3

您可以在前3個字符中編碼第一個字符串的長度。然後你使用接收器的長度來分割字符串。

不漂亮,但工程。

+1

這可能是最有效的解決方案,具體取決於字符串的長度,以及我的解決方案中需要替換多少個字符。 – 2012-02-16 20:01:41