现在的位置: 首页 > 综合 > 正文

对称加密算法

2013年09月19日 ⁄ 综合 ⁄ 共 2006字 ⁄ 字号 评论关闭
对称加密算法
2009-04-29 20:50

3.3.1

DES

算法函数接口


OpenSSL

DES

算法的基本函数就是
ECB
操作模式对应的函数DES_ecb_encrypt()
。该函数把一个8
字节明文分组input
加密成为一个8
字节密文分组output
。参数中密钥结构ks
是用函数DES_set_key()
准备好的,而密钥key
是用随机数算法产生的64
个随机比特。参数enc
指示是加密还是解密。该函数每次只加密一个分组,因此用来加密很多数据时并不方便。

void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output, DES_key_schedule *ks,int enc);

int DES_set_key(const_DES_cblock *key,DES_key_schedule *schedule);

DES
算法CBC
操作模式加解密函数是DES_ncbc_encrypt()
。参数length
指示输入字节长度。如果长度不是8
字节的倍数,则会被用0
填充到8
字节倍数。因此,输出可能比length
长,而且必然是8
字节的倍数。

void
DES_ncbc_encrypt(const unsigned char *input,unsigned char *output, long
length, DES_key_schedule *schedule, DES_cblock *ivec, int enc);

DES
算法CFB
操作模式加解密函数是DES_cfb_encrypt()
。参数length
指示输入字节长度。参数numbits
则指示了CFB
每次循环加密多少明文比特,也即密文反馈的比特数目。ivec
是初始向量,被看做第0
个密文分组,是不用保密但应随机取值的8
个字节。如果在一次会话中数次调用DES_cfb_encrypt()
,则应该记忆ivec
。由于CFB
模式中每次DES
基本操作只加密numbits
比特明文,因此如果numbits
太小则效率太低。

void
DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int
numbits, long length, DES_key_schedule *schedule, DES_cblock *ivec, int
enc);

   

另有一个numbit
64
比特的版本,既高效又没有填充的麻烦,推荐使用。num
中的返回值指示了ivec
中的状态,是和下次调用衔接的。

void
DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long
length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc)

   
OFB

CFB
类似,也有两个函数,用法一样。

void
DES_ofb_encrypt(const unsigned char *in,unsigned char *out,int
numbits,long length,DES_key_schedule *schedule,DES_cblock *ivec);

void
DES_ofb64_encrypt(const unsigned char *in,unsigned char *out,long
length,DES_key_schedule *schedule,DES_cblock *ivec,int *num);


3.3.2 A

ES

算法函数接口

典型参数的AES
的基本操作是把128
比特明文在128
比特密钥指引下加密成128
比特密文。OpenSSL
中关于AES
的函数名和参数接口和DES
的雷同。相关函数名如下(
参数略)

int AES_set_encrypt_key();

int AES_set_decrypt_key();

void AES_ecb_encrypt();

void AES_cbc_encrypt();

void AES_cfb128_encrypt();

void AES_ofb128_encrypt();


3.3.3

RC4

算法函数接口

   
RC4

密码算法是流算法,也叫序列算法。流算法是从密钥作为种子产生密钥流,明文比特流和密钥流异或即加密。RC4
算法由于算法简洁,速度极快,密钥长度可变,而且也没有填充的麻烦,因此在很多场合值得大力推荐。

   
OpenSSL

RC4
算法有两个函数: RC4_set_key()
设置密钥,RC4()
加解密。可以把RC4
看作异或,因此加密两次即解密。

void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);

void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata, unsigned char *outdata);

抱歉!评论已关闭.