信息安全实验:对称加密算法DES之DES_ecb_encrypt()中密钥key的生成

时间:2022-06-16 15:11:45

基本

int  DES_set_key(const_DES_cblock  *key,DES_key_schedule *schedule)

用8字节的key产生schedule.成功返回值为1,否则为0.

注:一个DES key是DES_cblock类型的,有8个bit组成,最后一位为奇校验位.schedule是key的扩展,目的是加速加密过程,它的每个字节的最后一位也是奇校验位.

其他

与密钥相关的函数还有很多,如下:

void DES_random_key(DES_cblock *ret);

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

void DES_set_key_unchecked(const_DES_cblock *key,DES_key_schedule);

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

void DES_set_odd_parity(DES_cblock *key);

int    DES_is_weak_key(const_DES_cblock *key);

void DES_string_to_key(const char *str,DES_cblock *key);

void DES_string_to_2keys(const char *str,DES_cblock *key1,DES_cblock *key2);

解释

void DES_random_key(DES_cblock *ret);//产生一个随机的key.

int    DES_set_key_checked(const_DES_cblock *key,DES_key_schedule *schedule);//在用key产生schedule的同时会确认key是奇校验的,不是weak或者semi-weak的;如果校验出错,-1返回;如果key是weak或semi-weak的,-2返回;如果有错误返回,schedule就没有正确产生.

void DES_set_key_unchecked(const_DES_cblock *key,DES_key_schedule);//由key产生shedule,但不做以上的那些检查.

int    DES_key_sched(const_DES_cblock *key,DES_key_schedule  *schedule);//与DES_set_key相似.

void DES_set_odd_parity(DES_cblock *key);//设置奇校验位

int    DES_is_weak_key(const_DES_cblock *key);//如果key是一个weak key,返回1;如果不是,返回0.

void DES_string_to_key(const char *str,DES_cblock *key);//由char类型的数组产生一个key

void DES_string_to_2keys(const char *str,DES_cblock *key1,DES_cblock *key2);//由char类型数组产生两个key.