本站首页    管理页面    写新日志    退出


Base64编码技术 
zhu_ruixian 发表于 2006/9/25 14:04:12

Base64简介在RFC2045(http://www.ietf.org/rfc/rfc2045.txt)中Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)字面上的意思就是把要传送的内容简单的加密,不能让人直接识别。RFC2045其实就是Multipurpose Internet Mail Extensions,base64就是用来简单加密邮件内容的。base64产生的原因还有一个就是,在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!由于以上原因,产生了Base64编码。Base64编码的应用首先,在E-Mail中,编码都是base64编码.随便用文本编辑器打开一封邮件,是eml为扩展名的,都可以看到如下内容:Content-Type: text/html; charset="gb2312"Content-Transfer-Encoding: base64电子邮件中的内容都是用base64处理过的.然后就是在文件的保存中base64也有应用。举个例子,在浏览器中输入www.baidu.com,回车,网页打开以后,选"文件""另存为",在"保存类型"中选"Web 档案,单一文件(*.mht)"然后点"保存"。保存后的文件,如果在浏览器中打开,像普通的网页一样,包括文字 图片等很多文件。那么程序内部是如何实现的,把很多个文件保存到一个文件中那?你现在可以在记事本中把刚才保存的文件打开,文件的最后你可以看到如下内容:         Content-Type: image/gif         Content-Transfer-Encoding: base64         Content-Location: http://gimg.baidu.com/img/gs.gif          R0lGODlhDwARAJEAAP///9vb27a2tgAAACwAAAAADwARAAACNISPqcJ6DGFYMaYKsGEBZl0Jn5UF         5ok2GXAaqTiKnudyFr1NHVci+y7YUUIwH9GxISFHigIAOw==gs.gif是个图片 下面的内容就是它的base64编码,也就是说网页保存的时候,是通过base64编码把很多文件保存到同一个文件中的。源代码我们现在看看base64.c的源代码。打开以后你会发现里面有8个函数: long b64dlen(size_t cch); long b64elen(size_t cb); long strb64d(const char * psz,size_t cch, void * p); long strb64e(const void * p,size_t cb,char * psz); int strisb64(const char * psz,size_t cch); long wcsb64d(const wchar_t * psz, size_t cch, void * p); long wcsb64e(const void * p, size_t cb, wchar_t * psz); int wcsisb64(const wchar_t * psz,size_t cch);作用: b64dlen  base64解码以后的长度 b64elen  base64编码以后的长度 strb64d  把base64编码以后的字符串,转换成为二进制数据 strb64e  把二进制数据转化为base64编码 strisb64 确定是不是有效的base64编码 wcsb64d  功能和strb64d一样,数据类型不同 wcsb64e  功能和strb64e一样,数据类型不同 wcsisb64 功能和strisb64一样,数据类型不同函数的使用例如加密文件:void Base64EncodeFile (char* filename){  FILE *RFile;  FILE *WFile;  int len;  //char *buffer=(char*)malloc(1024);  char buffer[1023];   char FileNameBuffer[255];  char EncodeBuffer[2046];  memset(buffer,0,255);  memset(FileNameBuffer,0,255);  sprintf(FileNameBuffer,"%s.base64",filename);  if ((RFile = fopen (filename, "rb")) == NULL){   printf ("Execute Result: %s can't be opened\n", filename);   return ;  }  if ((WFile = fopen (FileNameBuffer, "wb")) == NULL){   printf ("Execute Result: %s can't be opened\n", FileNameBuffer);   return ;  }  printf ("Execute Result: Base64 String Is Stored In %s ", FileNameBuffer);   while (len = fread (buffer, 1, 1023, RFile)){    long length=strb64e(buffer,len,EncodeBuffer);    fwrite(EncodeBuffer,1,length,WFile);   }  fclose (RFile);  fclose (WFile);   return;} 自己写了一个exe,可以到http://bbs.xml.org.cn/dispbbs.asp?boardID=47&ID=38211上下载

阅读全文(2696) | 回复(0) | 编辑 | 精华

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30

  公告
欢迎大家留言!既然来了,多少说两句!呵呵!

 


  我的分类(专题)
  最近日志

  最新评论

  留言板

  链接


  Blog信息
blog名称:
日志总数:33
评论数量:61
留言数量:-8
访问次数:238004
建立时间:2006年4月27日



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.512 second(s), page refreshed 144808703 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号