http://zh.wikipedia.org/wiki/DES
http://zh.wikipedia.org/wiki/3DES
块密码的工作模式,ECB,CBC,OFB和CFB等
与其它的块密码一样,对多个数据块的加密和解密可以使用多种工作模式进行,而模式的定义可以与块密码算法相独立。
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。
http://www.gxu.edu.cn/college/hxhgxy/sec/kcxx.htm
openssl des 例子:
http://blog.fpmurphy.com/2010/04/openssl-des-api.html
模式:
最简单的加密模式即为电子密码本(Electronic codebook,ECB)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。
1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式[14]。在CBC模式中,每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
若第一个块的下标为1,则CBC模式的加密过程为
而其解密过程则为
CBC是最为常用的工作模式。openssl默认的des3就是cbc模式:
http://www.openssl.org/docs/apps/enc.html
des-ede3-cbc Three key triple DES EDE in CBC mode des-ede3 Three key triple DES EDE in ECB mode des3 Alias for des-ede3-cbc des-ede3-cfb Three key triple DES EDE CFB mode des-ede3-ofb Three key triple DES EDE in OFB mode |
我们的系统中用的是ECB模式。
#include <openssl/des.h>
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc);
TDES 算法的ECB 模式。
int WINAPI TDES(
unsigned char *key,
int encrypt,
unsigned char *output,
unsigned char *input,
unsigned int inputLen);
参数:
key [in] 16 字节密钥。
所以是:
encrypt [in] 加密解密标识,1 表示加密而0 表示解密。
output [out] 加密或者解密输出结果。
input [in] 明文或者密文数据。
inputLen [in] 输入数据长度,必须为8 的整数倍。
返回值:
如果函数调用成功,返回RE_SUCCESS,否则返回错误代码。
des.h
typedef unsigned char DES_cblock[8]; 64位
#define DES_ecb2_encrypt(i,o,k1,k2,e) \
DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))