对称加密算法

对称加密算法
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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值