HTTP凭证 - 为什么转换为字节然后转换为字符串

时间:2015-09-14 14:26:32

标签: c# http

我已经看到很多在HTTP标头中包含凭据的示例,它们看起来都是这样的:

string _auth = string.Format("{0}:{1}", "myUser","myPwd");
string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));
string _cred = string.Format("{0} {1}", "Basic", _enc);
req.Headers[HttpRequestHeader.Authorization] = _cred;

凭证字符串将转换为字节数组,然后再转换为字符串。

为什么这样做?什么阻止你发送原始凭据字符串? (假设SSL设置为加密)

1 个答案:

答案 0 :(得分:5)

您不是简单地将字符串转换为字节然后再返回。实际上,您从常规字符串开始,最后使用base64编码的字符串。实际上需要代码,因为它将原始的auth字符串转换为HTTP服务器期望的格式。

要理解这一点,让我们逐步完成您的代码:

string _auth = string.Format("{0}:{1}", "myUser","myPwd");

这会使用您的用户名和密码并连接它们以创建格式为 myUser:myPwd

的字符串
string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth));

这一行可以分为两部分。在第一组括号内,Encoding.ASCII.GetBytes myUser:myPwd 转换为字节数组(更具体地说,109,121,85,115,101,114,58,109,121,80) ,119,100)。

然后,Convert.ToBase64String获取这些字节并将其转换为如下所示的字符串: bXlVc2VyOm15UHdk

这是HTTP服务器期望的经典Base64编码字符串。最后,第三行准备格式为“Basic bXlVc2VyOm15UHdk”的标题条目,该条目符合 Authorization 字段的HTTP规范。

您可以在wikipedia上了解有关此类授权的详情。