新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> VoiceXML, CCXML, OpenVXI
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 XML在语音技术中的应用 』 → Base64编码技术 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 21448 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: Base64编码技术 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     zhu_ruixian 帅哥哟,离线,有人找我吗?射手座1983-12-2
      
      
      威望:2
      等级:大二期末(Java考了96分!)
      文章:406
      积分:3471
      门派:W3CHINA.ORG
      注册:2006/3/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhu_ruixian发送一个短消息 把zhu_ruixian加入好友 查看zhu_ruixian的个人资料 搜索zhu_ruixian在『 XML在语音技术中的应用 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看zhu_ruixian的博客楼主
    发贴心情 Base64编码技术

    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;
    }
    附带可执行文件,可以base64编码字符串和文件


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    为什么总是索取的人多,奉献的人少...

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/9/22 18:24:00
     
     GoogleAdSense射手座1983-12-2
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML在语音技术中的应用 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/27 11:10:04

    本主题贴数4,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  Base64编码技术(3539字) - zhu_ruixian,2006年9月22日
        回复:  Thank you for your sharing!(27字) - siberiarabbit,2009年1月8日
        回复:  个人认为,(The Base64 Content-Transfer-Encoding is de..(530字) - equalto,2006年11月21日
        回复:  在别的地方看到一份源代码,共享一下。typedef unsigned long ulong3..(3906字) - zhu_ruixian,2006年10月16日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms