OpenSSL中对称加密算法的统一接口详解
http://tech.ddvip.com 2007年04月25日 社区交流
本文详细介绍OpenSSL中对称加密算法的统一接口详解
openssl/evp/c_alle.c
void OpenSSL_add_all_ciphers(void)
{
......
#ifndef OPENSSL_NO_RC4
EVP_add_cipher(EVP_rc4());
EVP_add_cipher(EVP_rc4_40());
#endif
......以后外部函数要调用RC4算法,实际就是找到RC4的EVP_CIPHER结构指针,进行初始化后进行加解密处理:
如openssl命令:
openssl enc –rc4 –in aaa.txt –out aaa.enc
执行顺序如下:
openssl/apps/openssl.c
main() -> do_cmd()->MAIN() (apps/enc.c) -> EVP_get_cipherbyname(), EVP_BytesToKey(), BIO_set_cipher(),
BIO_set_cipher -> EVP_CipherInit_ex -> ctx->cipher->init而加密算法作为BIO的一个环节被BIO_push到BIO中,这样就通过直接BIO读写操作就调用了相应的加解密算法。
3. 块加密算法定义宏
对于块加密算法,如AES、CAST、Blowfish等,其加解密函数都是类似的,openssl更是定义了一系列宏来简化算法的定义,如对于Blowfish算法接口:
/* openssl/evp/e_bf.c */
#ifndef OPENSSL_NO_BF
#include
#include "cryptlib.h"
#include
#include "evp_locl.h"
#include
#include
static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc);
typedef struct
{
BF_KEY ks;
} EVP_BF_KEY;
#define data(ctx) EVP_C_DATA(EVP_BF_KEY,ctx)
//定义块加密算法的宏
IMPLEMENT_BLOCK_CIPHER(bf, ks, BF, EVP_BF_KEY, NID_bf, 8, 16, 8, 64,
EVP_CIPH_VARIABLE_LENGTH, bf_init_key, NULL,
EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL)
// 显式只需要定义一个初始化密钥函数就可以了
static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
BF_set_key(&data(ctx)->ks,EVP_CIPHER_CTX_key_length(ctx),key);
return 1;
}
#endif在openssl/evp/evp_locl.h中该宏定义为:
责编:豆豆技术应用
正在加载评论...
- Linux/Unix 新闻
- Linux/Unix 入门
- Linux/Unix 命令
- Linux/Unix 安装
- Linux 嵌入式系统
- Linux/Unix 编程
- Linux/Unix 管理
- Linux/Unix 桌面
- Linux/Unix 内核
- Linux/Unix 软件
- SCO Unix
- NetBSD
- OpenBSD
- Redhat/Fedora Linux
- 手机
- Linux/Unix find 搜索命令
- Linux/Unix vi 命令
- Linux/Unix kde 桌面环境
- Linux/Unix GNOME 桌面环境
- Linux/Unix Make 命令
- Linux/Unix crontab 命令
- Linux/Unix ext3 文件系统
- Linux/Unix 文件系统详解
- Linux/Unix ADSL 拨号设置
- Linux/Unix GRUB 配置及应用
- Linux/Unix nfs配置
- Linux/Unix 硬件信息查看及管理
- Linux/Unix 优化
- Linux/Unix 交换分区Swap管理及应用
- Linux/Unix 用户管理
- Linux/Unix Ramdisk
- Linux/Unix 密码恢复管理
- Linux/Unix 文件删除恢复
- Linux/Unix fdisk分区
- Linux/Unix lvs负载均衡管理
- Linux/Unix root用户
- Linux/Unix 集群
- Linux/Unix 日志
- 更多Linux/Unix专题……