首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>系统管理>正文

OpenSSL中对称加密算法的统一接口详解

http://www.oklinux.cn  2007-04-25  来源:    会员收藏  游客收藏  【 】 

1. 前言

OpenSSL是一个开源的SSL实现,其中集成了多种加密算法。OpenSSL将各算法的各自独特地方封装在内部,对外则使用了统一的算法接口,因此外部应用只需指定使用何种算法,就可以用相同的方法调用加解密函数而不用考虑其差异。这种算法统一封装的方式在其他很多软件中都采用,也给算法扩充提供了方便。

以下代码来自OpenSSL-0.9.7b。

 

2. EVP接口

2.1 数据结构

Openssl/crypto/evp目录下定义各种算法的接口源文件,这些文件要作的事就是要填写描述算法的EVP_CIPHER结构,每个算法都有一个EVP_CIPHER结构进行描述:

Openssl/crypto/evp/evp.h

struct evp_cipher_st

{

int nid;

int block_size;

int key_len; /* Default value for variable length ciphers */

int iv_len;

unsigned long flags; /* Various flags */

int (*init)(EVP_CIPHER_CTX *ctx, const unsigned char *key,

const unsigned char *iv, int enc); /* init key */

int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out,

const unsigned char *in, unsigned int inl);/* encrypt/decrypt data */

int (*cleanup)(EVP_CIPHER_CTX *); /* cleanup ctx */

int ctx_size; /* how big ctx->cipher_data needs to be */

int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Populate a ASN1_TYPE with parameters */

int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); /* Get parameters from a ASN1_TYPE */

int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Miscellaneous operations */

void *app_data; /* Application data */

} /* EVP_CIPHER */;

typedef struct evp_cipher_st EVP_CIPHER;

nid:算法的ID号,在include/openssl/object.h中定义;

block_size:加解密的分组长度

key_len:密钥长度

iv_len:初始向量长度

flags:标志

(* init):初始化函数,提供密钥,IV向量,算法上下文CTX,加密还是解密

(* do_cipher):加解密函数,提供算法上下文CTX,输出数据,输入数据和输入数据长度

(* clean_up):资源释放

ctx_size:各算法相关数据大小,实际就是各算法的密钥数据

(*set_asn1_parameters):设置asn1参数

(*get_asn1_parameters):获取asn1参数

(*ctrl):其他控制操作

app_data:算法相关数据

 

另一个重要的数据结构是描述加密算法的上下文结构EVP_CIPHER_CTX,这个结构是进入算法前由系统根据指定的算法提供的:

struct evp_cipher_ctx_st

{

const EVP_CIPHER *cipher;

ENGINE *engine; /* functional reference if 'cipher' is ENGINE-provided */

int encrypt; /* encrypt or decrypt */

int buf_len; /* number we have left */

unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */

unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */

unsigned char buf[EVP_MAX_BLOCK_LENGTH];/* saved partial block */

int num; /* used by cfb/ofb mode */

void *app_data; /* application stuff */

int key_len; /* May change for variable length cipher */

unsigned long flags; /* Various flags */

void *cipher_data; /* per EVP data */

int final_used;

int block_mask;

unsigned char final[EVP_MAX_BLOCK_LENGTH];/* possible final block */

} /* EVP_CIPHER_CTX */;

typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;

参数为:

cipher:算法指针

engine:加解密引擎

encrypt:加密或解密

buf_len:剩余空间

oiv:原始的初始向量

共5页: 上一页 1 [2] [3] [4] [5] 下一页

上一篇:Linux高性能计算集群-概述   下一篇:UNIX设置MySql数据同步 实现复制功能


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux下如何查看某一进程的CPU占用率
·深入浅出 Linux字符设备驱动程序解析
·Linux系统环境下的高级隐藏技术介绍
·Linux操作系统下SAMBA服务的搭建过程
·Linux操作系统下NFS服务的搭建过程
·如何在非root状态下用root身份执行命令
·Samba服务典型的三种共享配置
·在RHEL4上的日志服务器配置案例解析
·Fedora Core6中IPtables日志管理技巧
·配置文件/etc/syslog.conf的实例解析
·让Linux操作系统可以Mount NTFS分区
·Linux AS4系统下LVM的使用详细解析
·如何在Subversion系统中运行hook脚本
·用Subversion软件进行个人文档管理
·linux的运行模式:Runlevel详细解析
·Linux系统启动引导程序配置文件解析
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·系统管理:如何禁止RHEL AS4的图形启动
·Windows和Linux Fedora8双系统安装过程
·Linux通过ndiswrapper安装无线网卡驱动
·Linux系统利用Crontab命令实现定时重启
·Ubuntu Linux系统设定服务自行开机启动
·在Linux系统下查看端口的使用情况及启
·Linux系统下安装Perl及Perl模块方法
·Qtopia应用程序与Linux内核数据通信介
·Ubuntu下NVIDIA驱动安装及3D桌面的设置
·修改VMware下Ubuntu界面分辨率过高问题
·在Linux系统下如何调整文件打开方式
·如何在Linux系统下更改文件使用权限
  阅读排行
·使用源代码将 Glibc 升级到 2.6
·Linux下推荐的常用应用程序列表
·使用 ActiveScaffold 增强 Ruby on Rai
·什么是Linux?Linux与UNIX之间的关系
·应用:postfix邮件服务器安全策略
·提高Linux系统性能加速网络应用程序
·Linux用户(User)和用户组管理概述
·Linux操作系统的内核引导程序详细解析
·在 Linux on POWER 上利用透明大内存页
·Ubuntu Linux操作系统中的用户管理
·使用/proc文件系统来访问Linux内核
·基于linux操作系统架构openvpn总结
·Grub引导程序的安装、配置及使用汇总
·几种Linux嵌入式开发环境的简单介绍
·C++自动化(模板元)编程基础与应用(1)
网摘收藏: