我知道這是一個非常愚蠢的問題,因爲我還是新手。特殊字符轉換字符串
案例:
String一個:從加密算法的輸出的字符串(包含特殊字符)
字符串B:從字符串A的哈希函數的輸出的字符串(包含特殊字符)
String C = A + "|" + B;
問題:
我想他們一起發件人發送的字符串C,這樣我可以在接收器
但S飾它們分開ng A & B可能包含我的分隔符「|」
那麼你對我的建議是什麼? [C#]
我知道這是一個非常愚蠢的問題,因爲我還是新手。特殊字符轉換字符串
案例:
String一個:從加密算法的輸出的字符串(包含特殊字符)
字符串B:從字符串A的哈希函數的輸出的字符串(包含特殊字符)
String C = A + "|" + B;
問題:
我想他們一起發件人發送的字符串C,這樣我可以在接收器
但S飾它們分開ng 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]));
+!很好,我試圖寫。 – 2012-02-16 19:57:55
如何轉換回來? – 2012-02-16 20:06:07
輸入不是有效的Base-64字符串,因爲它包含非基本64字符,多個填充字符或填充字符中的非空白字符。 – 2012-02-16 20:19:21
你可以逃避所有管道在字符串C
例如
,這將保證你在你的字符串除了一個連接A和B沒有管,但它也會讓你在另一邊分開它們,並將所有現有的管道恢復到原來的位置。只是顛倒操作的順序。
請注意,低效率將限制爲每個「=」和「|」的+1個字符在你的字符串中 – 2012-02-16 19:57:45
如果加密算法在輸出中產生| =,他該怎麼辦?它將在另一側替換爲|。這是不正確的 – Anton 2012-02-16 19:58:24
你是正確的,我創建我的迴應時錯誤鍵入...編輯它來解決問題。 – 2012-02-16 20:00:08
您可以在前3個字符中編碼第一個字符串的長度。然後你使用接收器的長度來分割字符串。
不漂亮,但工程。
這可能是最有效的解決方案,具體取決於字符串的長度,以及我的解決方案中需要替換多少個字符。 – 2012-02-16 20:01:41
爲什麼你不能將它們作爲兩個單獨的參數傳遞? – BrokenGlass 2012-02-16 19:48:56
'B'具有恆定的長度嗎? – zerkms 2012-02-16 19:49:38
或爲什麼你不能使用分隔符,你的加密算法永遠不會產生? – Anton 2012-02-16 19:50:34