int DES_enc_read(int fd,void *buf,int len,DES_key_schedule *sched,
DES_cblock *iv);
使用此函数时要小心,如果写入的数据超过MAXWRITE个字节,那么数据将会被分割成多个数据块,每个数据加密时使用的IV相同。因此,在使用此函数时,一定要了解此函数的内部实现机制;
此函数客户从文件,或者socket等输入设备中读取数据,并解密数据;
解密模式根据DES_rw_mode的定义,采用PCBC或者CBC模式;
fd: 设备描述符;
buf: 输出数据缓冲区;
len: 长度;
sched: 密钥;
iv: 初始化向量;
返回值: -1 错误,其他数据,读取的数据长度;
使用此函数时要小心,如果写入的数据超过MAXWRITE个字节,那么数据将会被分割成多个数据块,每个数据加密时使用的IV相同。因此,在使用此函数时,一定要了解此函数的内部实现机制;
int DES_enc_write(int fd,const void *buf,int len,DES_key_schedule *sched,
DES_cblock *iv);
此函数将数据加密后写入文件,或者socket等输出设备;
加密模式根据DES_rw_mode的定义,采用PCBC或者CBC模式;
fd: 设备描述符;
buf: 输入数据缓冲区;
len: 长度;
sched: 密钥;
iv: 初始化向量;
返回值: -1 错误,其他数据,写入的数据长度;
char *DES_fcrypt(const char *buf,const char *salt, char *ret);
DES_fcrypt()是Unix下crypt算法的更快的一种实现,值需要使用少量的内存空间,与通常的crypt不同,第三个参数是返回值,至少需要14个字节的空间;
此函数支持多线程调用;
char *DES_crypt(const char *buf,const char *salt);
此函数调用DES_fcrypt,第三个参数由一个静态数组替代,所以此函数在多线程调用下是不安全的;
void DES_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
long length,DES_key_schedule *schedule,DES_cblock *ivec);
DES OFB 加密;
in: 输入数据;
out:输出数据;
numbits: OFB位数;
length: 数据长度;
schedule: 密钥;
ivec: 初始化向量;
void DES_pcbc_encrypt(const unsigned char *input,unsigned char *output,
long length,DES_key_schedule *schedule,DES_cblock *ivec,
int enc);
Kerberos v4中用到的算法, 加密/解密时使用传播块链式模式;
input: 输入数据;
output: 输出数据;
length: 数据长度;
schedule: 密钥;
ivec: 初始化向量;
enc: 加密/解密 加密: DES_ENCRYPT , 解密: DES_DECRYPT
DES_LONG DES_quad_cksum(const unsigned char *input,DES_cblock output[], long length,int out_count,DES_cblock *seed);
同样是Kerberos v4中用到的函数,返回输入数据的4个字节的checksum。算法迭代次数有out_count控制,可以是1,2,3,或者4此,输入时非空的8个字节;
input: 输入数据;
output: 输出数据,用于计算迭代时输出数据缓存;
length:数据长度;
out_count:迭代次数;
seed: 种子数据;
返回值为4个字节的checksum,DES_LONG类型;
int DES_random_key(DES_cblock *ret);
0.9.5版本之前,用于生成加密用的随机数,MIT 库中也使用此函数;
返回值: 1 成功, 0 失败;
void DES_set_odd_parity(DES_cblock *key);
将传入的密钥设为奇数;
int DES_check_key_parity(const_DES_cblock *key);
检查密钥的奇偶性;
0:密钥值中存在偶数;1: 密钥值为奇数;
int DES_is_weak_key(const_DES_cblock *key);
检查密钥是否为弱密钥;
1: 为弱密钥, 0: 不是弱密钥;