2013-02-12 104 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

相关问题