openssl数据压缩

介绍

数据压缩是将原有数据通过某种压缩算法计算得到相对数据量小的过程。这种过程是可逆的,即能通过压缩后的数据恢复出原数据。数据压缩能够节省存储空间,减轻网络负载。

在即需要加密又需要压缩的情况下,必须先压缩再加密,次序不能颠倒。因为加密后的数据是一个无序的数据,对它进行数据压缩,效果不大。

SSL协议本身支持压缩算法,Openssl实现也支持压缩算法。它实现了一个空的压缩算法(crypto/comp/c_rle.c)并支持zlib压缩算法(crypto/comp/ c_zlib.c)。openssl中用户可实现自己的压缩算法。

当openssl在有zlib库的平台下安装时,需要有zlib 或者zlib-dynamic选项。比如:

复制代码
./config zlib

./config zlib-dynamic

函数说明

  1. COMP_rle

返回openssl实现的空压缩算法,返回值为一个COMP_METHOD。

  1. COMP_zlib

返回基于zlib库的COMP_METHOD。

  1. COMP_CTX_new

初始化上下文,输入参数为COMP_METHOD。

  1. COMP_compress_block

压缩计算。

  1. COMP_expand_block

解压计算。

openssl中压缩算法协商

Openssl中的压缩算法的协商与加密套件一样,都是由客户端在client hello消息中指定一个算法列表,而由服务端决定选取其中的一种,并通过server hello消息来通知客户端。

编程示例

cpp 复制代码
#include <string.h>

#include <openssl/comp.h>

int    main()

{

       COMP_CTX          *ctx;

       int                  len,olen=100,ilen=50,i,total=0;

       unsigned charin[50],out[100];

       unsigned charexpend[200];



#ifdef      _WIN32

       ctx=COMP_CTX_new(COMP_rle());

#else

       /* for linux */

       ctx=COMP_CTX_new(COMP_zlib());

#endif

       for(i=0;i<50;i++)

              memset(&in[i],i,1);

       total=COMP_compress_block(ctx,out,olen,in,50);

       len=COMP_expand_block(ctx,expend,200,out,total);

       COMP_CTX_free(ctx);

       return 0;

 }
相关推荐
虚无的纽扣5 小时前
【Linux】线程互斥:多线程改同一个变量,到底会出什么问题
linux·服务器·1024程序员节
lazy H5 小时前
【计算机网络】第 5 篇:TCP 和 UDP 有什么区别?从 Java 后端场景理解两种传输协议
经验分享·后端·网络协议·tcp/ip·计算机网络·1024程序员节
Shadow(⊙o⊙)5 小时前
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
java·服务器·前端·1024程序员节
Pointer Pursuit5 小时前
Linux环境变量
linux·服务器·c语言·链表·1024程序员节
Marst Code6 小时前
(Unix)pipe 把程序当成可组合的函数
服务器·unix
CHHH_HHH6 小时前
【Linux网络篇】初识网络与Socket编程基础
linux·服务器·c语言·开发语言·网络·后端·1024程序员节
星恒随风7 小时前
Linux线程同步与互斥:彻底理解读者写者问题、读写锁原理、读者优先与写者优先(附pthread完整实验)
linux·服务器·笔记·1024程序员节
_upupup7 小时前
Linux中的进程
linux·服务器·1024程序员节
虚无的纽扣7 小时前
【Linux】线程同步:条件不满足时,线程该怎么等
linux·服务器·1024程序员节
byte轻骑兵7 小时前
【LMP】规范精讲[8]: 主从易位——角色切换的时序反转与微微网重构
网络协议·安全·蓝牙协议·lmp·链接管理