首页IT科技basis词性转化(basic coder » HTTP代理原理及Base64编码)

basis词性转化(basic coder » HTTP代理原理及Base64编码)

时间2025-09-19 12:19:05分类IT科技浏览6382
导读:HTTP代理原理及Base64编码...

HTTP代理原理及Base64编码

有网友留言希望我在飞信的新版本中加上代理功能                ,这两天折腾了一下                          ,把HTTP代理给加上了         ,SOCKS代理太麻烦了            ,暂时应该不会考虑加它了                         ,而且用的人也不多              ,加不加意义不大了                。

写一下HTTP代理的原理        ,其实原理很简单                        ,就是通过HTTP协议与代理服务器建立连接                  ,协议信令中包含要连接到的远程主机的IP和端口号    ,如果有需要身份验证的话还需要加上授权信息                        ,服务器收到信令后首先进行身份验证                      ,通过后便与远程主机建立连接,连接成功之后会返回给客户端200                    ,表示验证通过                          ,就这么简单    ,下面是具体的信令格式:

CONNECT 59.64.128.198:21 HTTP/1.1

Host: 59.64.128.198:21

Proxy-Authorization: Basic bGV2I1TU5OTIz

User-Agent: OpenFetion

其中Proxy-Authorization是身份验证信息                ,Basic后面的字符串是用户名和密码组合后进行base64编码的结果                          ,也就是对username:password进行base64编码                          。

其实编码对安全性没什么意义         ,base64严格意义上都已经不能算是加密了            ,现在信息安全这么受重视的年代                         ,不需要密钥的加密算法还是叫编码更贴切一些              ,抓到这种包之后瞬间就可以得到用户名和密码         。

HTTP/1.0 200 Connection established

OK        ,客户端收到收面的信令后表示成功建立连接                        ,接下来要发送给远程主机的数据就可以发送给代理服务器了                  ,代理服务器建立连接后会在根据IP地址和端口号对应的连接放入缓存    ,收到信令后再根据IP地址和端口号从缓存中找到对应的连接                        ,将数据通过该连接转发出去            。

下面说一下base64这种编码方式                      ,它还是很常用的,优点是使用起来简单                    ,缺点是编码效率低劲(每3个字节会编码成4个字节)                          ,安全性差(这个刚才已经说过了)                         。

以前用.NET和java的时候形形色色的编码加密散列都见过也差不多都用过    ,不过高级语言会提供相应的类                ,一两句话就可以实现加密解密                          ,当然在C里面也可以用OpenSSL来实现         ,同样简单            ,飞信里面也用到了base64编码                         ,就是在2010版本里面要求输入图片验证码的时候用到的              ,服务器端会将生成的图片验证码图片的二进制数据流进行base64编码        ,以明文的方式放到xml中发送给客户端                        ,客户端对其进行解码                  ,然后就可以得到验证码图片(还是觉得这个过程有点多此一举)              。

今天看了一下base64的编码规则    ,把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24)                        ,之后在6位的前面补两个0                      ,形成8位一个字节的形式,这样就形成了4个8位的字节                    ,然后再将每个8位字节转换成10进制                          ,再从编码表中找到对应的字符就可以了    ,编码的时候3个字节一组进行编码                ,当不足3个字节的时候                          ,进行完上面的操作后         ,将剩余的位用0补齐(注意:并不是补到32位)            ,于是2个字节编成3个字节                         ,不足四个字节的用’=补齐              ,哈        ,感觉自己写得乱七八糟的                        ,不过这种东西在网上一搜一大片                  ,也没有必要细说了    ,另外附上刚才写的一个编码的小程序        。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #include <stdio.h> #include <stdlib.h> #include <string.h> char* base64_encode(const char *src); int main(int argc , char *argv[]) { const char in[] = "levin"; char *res = base64_encode(in); printf("%s\n" , res); free(res); return 0; } char* base64_encode(const char *src){ char* dest; char in[4]; long buf = 0 , tmp = 0; int i = 0 , j = 0 , count = 0; char table[] = { A , B , C , D , E , F , G , H , I , J , K , L , M , N , O , P , Q , R , S , T , U , V , W , X , Y , Z , a , b , c , d , e , f , g , h , i , j , k , l , m , n , o , p , q , r , s , t , u , v , w , x , y , z , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , + , / , = }; count = strlen(src) / 3 + (strlen(src) % 3 == 0 ? 0 : 1); dest = (char*)malloc(count * 4 + 1); for( ; j < count ; j++){ bzero(in , sizeof(in)); strncpy(in , src + j * 3 , 3 ); buf = 0 , buf = 0 , i = 0; for(; i < strlen(in) ; i++){ tmp = (long)in[i]; tmp <<= (16 - i * 8); buf |= tmp; } for(i = 0; i < 4 ; i ++){ if(strlen(in) + 1 > i){ tmp = buf >> (18 - i * 6); tmp &= 0x3F; dest[j * 4 + i] = table[tmp]; }else{ dest[j * 4 + i] = =; } } } return dest; }

上面的程序会输出bGV2aW4=                        ,因为最后一组不足3字节                      ,用=补了一个字节                        。

程序很简单,写它纯粹是为了强化一下对base64编码规则的记忆                    ,解码的就不写了                  。

我程序里面是直接用OpenSSL来干的                          ,少量数据进行编码的时候一个函数就够了    ,很方便:

1 EVP_EncodeBlock(out , (unsigned char*)in , strlen(in));

原创文章                ,转载请注明: 转载自basic coder

本文链接地址: http://basiccoder.com/http-proxy-and-base64-encode.html

CONNECT 59.64.128.198:21 HTTP/1.1

Host: 59.64.128.198:21

Proxy-Authorization: Basic bGV2I1TU5OTIz

User-Agent: OpenFetion

HTTP/1.0 200 Connection established

原创文章                          ,转载请注明: 转载自basic coder

本文链接地址: http://basiccoder.com/http-proxy-and-base64-encode.html

声明:本站所有文章         ,如无特殊说明或标注            ,均为本站原创发布    。任何个人或组织                         ,在未征得本站同意时              ,禁止复制                  、盗用                         、采集        、发布本站内容到任何网站             、书籍等各类媒体平台                        。如若本站内容侵犯了原著者的合法权益        ,可联系我们进行处理                      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
手机在网上赚钱犯法吗(手机网上什么最赚钱项目-一部手机即可轻松月入过万,为什么还教你赚钱?揭秘骗子真实套路)