HTTP凭证-为什么转换为字节而不是字符串

本文关键字:字符串 字节 凭证 为什么 转换 HTTP | 更新日期: 2023-09-27 18:12:44

我见过很多在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设置为加密)

HTTP凭证-为什么转换为字节而不是字符串

您不是简单地将字符串转换为字节,然后再转换回来。实际上,您从一个常规字符串开始,以一个base64编码的字符串结束。该代码实际上是需要的,因为它将原始认证字符串转换为HTTP服务器期望的格式。

为了理解这一点,让我们逐步浏览一下代码:

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

这将获取您的用户名和密码并将它们连接起来以创建格式为myUser:myPwd

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

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

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

这是HTTP服务器期望的经典base64编码字符串。最后,第三行准备格式为"Basic bXlVc2VyOm15UHdk"的头条目,它符合Authorization字段的HTTP规范。

您可以在维基百科上了解更多关于这种授权的信息。