当前位置: 首页 > news >正文

蛋糕网站源码营销策划方案的目的

蛋糕网站源码,营销策划方案的目的,seminar,网站内部优化建设文章目录 1 base641.1 概念1.2 应用场景 2 base64 算法 #xff08;重要#xff09;3 openssl 中base64的使用3.1 BIO 操作3.2 base64 编码 - bio链的写操作3.3 base64 解码 - bio链的读操作 1 base64 1.1 概念 Base64是一种基于64个可打印字符来表示二进制数据的表… 文章目录 1 base641.1 概念1.2 应用场景 2 base64 算法 重要3 openssl 中base64的使用3.1 BIO 操作3.2 base64 编码 - bio链的写操作3.3 base64 解码 - bio链的读操作 1 base64 1.1 概念 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9这样共有62个字符加上**和/**, 共64个字符. 普通的文本数据也可以使用base64进行编解码Base64编解码的过程是可逆的Base64不能当做加密算法来使用 1.2 应用场景 在计算机中任何数据都是按ascii码存储的而ascii码的128255之间的值是不可见字符。 而在网络上交换数据时比如说从A地传到B地往往要经过多个路由设备由于不同的设备对字符的处理方式有一些不同这样那些不可见字符就有可能被处理错误这是不利于传输的。所以就先把数据先做一个Base64编码统统变成可见字符这样出错的可能性就大降低了。 base64 应用 它可用来作为电子邮件的传输编码。 附件 图片/音频/视频- 二进制邮件传输协议只支持 ASCII字符传递因此如果要传输二进制文件图片、视频是无法实现的。 Http协议 HTTP协议要求请求行和请求头都必须是ASCII编码 数据库数据读写 - blob blob格式: - 文件、音频、视频、图片blob格式的数据中有一些特殊的数据: 中文 写之前进行编码读出来之后解码 二进制数据 2 base64 算法 重要 把3个8位字节3*824转化为4个6位的字节4*624 假设有一个字符串, 需要对这个字符串分组, 每3个字节为一组, 分成N组将每一组的3个字节拆分, 拆成4个字节, 每个字节有6bit 在6位的前面补两个0形成8位一个字节的形式 每个组就从3个字节变成了4个字节结论: base64编码之后的字符串变大了, 如果剩下的字符不足3个字节则用0填充输出字符使用’‘因此编码后输出的文本末尾可能会出现1或2个’, 表示补了多少字节解码的时候会自动去掉。 数据通过base64编码, 编码之后的数据边长了还是变短了? - 变长了 - 每三个字节一组, 编码之后每组增加一个字节 编码之后的数据末尾有可能有, 这个是什么意思? - 代表0, 0是给最后一组补位用的, 最后一组缺几个字节就补几个0 - 在解码的时候根据的个数去掉对应的字节数 Base64 将 8 位为一个单元的字节数据拆分为 6 位为一个单元的二进制片段。每一个 6 位单元对应 Base64 索引表中的一个字符。简单举个例子下图中 M 的 ASCII 码是 77 , 而转换为二进制后前六位二进制对应值为 19为 Base64 字典中的 T。 3 openssl 中base64的使用 3.1 BIO 操作 // 创建BIO对象 BIO *BIO_new(const BIO_METHOD *type);// 封装了base64编码方法的BIO,写的时候进行编码读的时候解码 BIO_METHOD* BIO_f_base64();// 封装了内存操作的BIO接口包括了对内存的读写操作 BIO_METHOD* BIO_s_mem();// 创建一个内存型的BIO对象 // BIO * bio BIO_new(BIO_s_mem()); BIO *BIO_new_mem_buf(void *buf, int len);// 创建一个磁盘文件操作的BIO对象 BIO* BIO_new_file(const char* filename, const char* mode);// 从BIO接口中读出len字节的数据到buf中。 // 成功就返回真正读出的数据的长度失败返回0或1如果该BIO没有实现本函数则返回2。 int BIO_read(BIO *b, void *buf, int len);- buf: 存储数据的缓冲区地址- len: buf的最大容量// 往BIO中写入长度为len的数据。 // 成功返回真正写入的数据的长度失败返回0或1如果该BIO没有实现本函数则返回2。 int BIO_write(BIO *b, const void *buf, int len);- buf: 要写入的数据, 写入到b对应的设备(内存/磁盘文件)中- len: 要写入的数据的长度- // 将BIO内部缓冲区的数据都写出去, 成功: 1, 失败: 0或-1 int BIO_flush(BIO *b);- 在使用BIO_write()进行写操作的时候, 数据有时候在openssl提供的缓存中- 将openssl提供的缓存中的数据刷到设备(内存/磁盘文件)中// 把参数中名为append的BIO附加到名为b的BIO上并返回b // 连接两个bio对象到链表中 // 在链表中的关系: b-append BIO * BIO_push(BIO *b, BIO *append);- b: 要插入到链表中的头结点- append: 头结点的后继- // 把名为b的BIO从一个BIO链中移除并返回下一个BIO如果没有下一个BIO那么就返回NULL。 BIO * BIO_pop(BIO *b);typedef struct buf_mem_st BUF_MEM; struct buf_mem_st {size_t length; /* current number of bytes */char *data;size_t max; /* size of buffer */unsigned long flags; };// 该函数也是一个宏定义函数它将b底层的BUF_MEM结构放在指针pp中。 BUF_MEM* ptr; long BIO_get_mem_ptr(BIO *b, BUF_MEM **pp); // 释放整个bio链 void BIO_free_all(BIO *a);我们举几个简单的例子说明BIO_push和BIO_pop的作用假设md1、md2是digest类型的BIOb64是Base64类型的BIO而f是file类型的BIO那么如果执行操作那么就会形成md1-md2-b64-f的BIO链大家可以看到在构造完一个BIO后头一个BIO就代表了整个BIO链这根链表的概念几乎是一样的。 这时候任何写往md1的数据都会经过md1,md2的摘要或说hush运算)然后经过base64编码最后写入文件f。可以看到构造一条好的BIO链后操作是非常方便的你不用再关心具体的事情了整个BIO链会自动将数据进行指定操作的系列处理。 需要注意的是如果是读操作那么数据会从相反的方向传递和处理对于上面的BIO链数据会从f文件读出然后经过base64解码然后经过md1,md2编码最后读出。 BIO* md1 BIO_new(); // md1 hash计算 BIO* md2 BIO_new(); // md2 hash计算 BIO* b64 BIO_new(); // base64 编解码 BIO* f BIO_new(); // 操作磁盘文件// 组织bio链 // b64-f BIO_push(b64, f); // 那么就会形成一个b64-f的链。然后再执行下面的操作 // md2-b64-f BIO_push(md2, b64); // md1-md2-b64-f BIO_push(md1, md2);// bIO链 md1-md2-b64-f // 写数据操作 int BIO_write(md1, hello, world, 11); // 数据的处理过程 // 进行md1 的哈希计算 - md2的哈希计算 - base64编码 - 数据被写到磁盘3.2 base64 编码 - bio链的写操作 char* data hello, world;// 创建base64编码的bio对象 BIO* b64 BIO_new(BIO_f_base64());// 最终在内存中得到一个base64编码之后的字符串 BIO* mem BIO_new(BIO_s_mem());// 将两个bio对象串联, 结构: b64-mem BIO_push(b64, mem);// 将要编码的数据写入到bio对象中 BIO_write(b64, data, strlen(data)1);// 将数据从bio对象对应的内存中取出 - char* BUF_MEM* ptr;// 数据通过ptr指针传出 long BIO_get_mem_ptr(b64, ptr); char* buf new char[ptr-length]; memcpy(buf, ptr-data, ptr-length); printf(编码之后的数据: %s\n, buf);3.3 base64 解码 - bio链的读操作 // 要解码的数据 char* data xxxxxxxxxxxxxxxxxxxx;// 创建base64解码的bio对象 BIO* b64 BIO_new(BIO_f_base64()); #if 0 // 存储要解码的数据 BIO* mem BIO_new(BIO_s_mem()); // 将数据写入到mem对应的内存中 BIO_write(mem, data, strlen(data)); #else BIO *mem BIO_new_mem_buf(data, strlen(data)); #endif// 组织bio链 BIO_push(b64, mem);// 读数据 char buf[1024]; int BIO_read(b64, buf, 1024); printf(base64解码的数据: %s\n, buf);
http://www.pierceye.com/news/517630/

相关文章:

  • 推荐一个代做毕业设计的网站云服务器怎么搭建
  • 网站制作计算机电商运营seo
  • 网站关键词分隔符建站用什么工具
  • 广元网站开发兰州电商平台网站建设
  • 网站怎么黑北京广告设计公司排行
  • 番禺网站排名推广优化排名网站开发类标书模板
  • 青海市住房和城乡建设厅网站关于网站建设的合同协议书
  • 中文企业网站模板下载wordpress付费知识
  • 网站设计图能用ps做么襄城县住房和城市建设局网站
  • 汕头市网站建设分站服务机构建设网站费用会计分录
  • 360网站推广wordpress 插件 定时
  • 企业设计网站公司易语言可以做网站嘛
  • 乐昌网站建设wordpress 自动推送
  • 建立自我追求无我什么意思广州网站优化推广
  • 公司介绍网站怎么做的苏州网页制作招聘
  • 天长网站建设黄骅市长
  • 深圳网站维护页面设计WordPress在线留言插件
  • 网站改版的几个建议夜夜夜在线观看
  • 网站开发和 app开发的区别百度推广管家
  • 门窗网站制作宣传语建设一个商城式网站可以吗
  • 网站优化推广公司北京软件开发公司滕迎江
  • 网站建立的连接不安全怎么解决网站如何做数据库
  • 营销型制作网站公司重庆蒲公英网站建设公司
  • 官方网站找工作公众号中国航发网上采购平台
  • 大连网站制作仟亿科技个人网站建站步骤
  • 网站php文件上传成都网站搜索排名优化哪家好
  • 南京做网站费用做网站的服务器配置
  • 外贸用什么平台自建站较好门户网站盈利
  • 外包兼职做图的网站做视频网站用哪个模板
  • 全球购物网站大全百度网盟推广官方网站