2013-02-12 23 views
3

我正在開發一個REST API。客戶端將其用戶名和密碼放入HttpClient的授權頭中,然後使用Server的公鑰進行加密。用戶名和密碼將始終由字母和數字組成,這意味着它可以用ASCII表示。如何在Http Authorization Header中轉換併發送字符串?

我正在使用此代碼進行加密。

string encrypted = Encrypt (someText, crypto); 

    public static string Encrypt (string plainText, RSACryptoServiceProvider crypto) 
    { 
     var plainData = GetBytes (plainText); 
     var encryptedData = crypto.Encrypt (plainData, true); 
     return GetString (encryptedData); 
    } 

    public static byte[] GetBytes (string str) 
    { 
     var bytes = new byte[str.Length * sizeof (char)]; 
     Buffer.BlockCopy (str.ToCharArray(), 0, bytes, 0, bytes.Length); 
     return bytes; 
    } 

    public static string GetString (byte[] bytes) 
    { 
     var chars = new char[bytes.Length/sizeof (char)]; 
     Buffer.BlockCopy (bytes, 0, chars, 0, bytes.Length); 
     return new string (chars); 
    } 

問題是,我得到加密後,這個字符串

꠨屰歐㼡⭮鍴⬎㔾䐛え멩戻덒郝㬭ே䉚ꑰ䵇᷹᷶虣ⱒ̿ঊࠎ飳枹鬭쉦폩ᤫ槺愐丄裘ډ졽肟䷋ٱ᮷튼쁡鮤붮飦ꃨ◡뉋⭠夏旻浨፛᠏რ

我不能在授權頭髮送這些Unicode字符。有沒有辦法以ASCII格式獲取加密文本,以便通過HttpClient輕鬆發送?

回答

2

您可以將其編碼爲base64。 Base64編碼產生一個適合通過支持ASCII字符串的傳輸發送的字符串。

public static string Encrypt (string plainText, RSACryptoServiceProvider crypto) 
{ 
    var plainData = GetBytes (plainText); 
    var encryptedData = crypto.Encrypt (plainData, true); 
    return Convert.ToBase64String (encryptedData); 
} 

順便說一句,我將取代的字符串轉換爲字節數組與Encoding.GetBytes自定義GetBytes方法;這是內置的和首選的方法。例如:

var plainData = System.Text.Encoding.UTF8.GetBytes(plainText); 
+0

謝謝,它的工作原理。只需做一個小改動'Encoding.Unicode.GetBytes' – 2013-02-12 19:48:19

相關問題