des相关

http://zh.wikipedia.org/wiki/DES

http://zh.wikipedia.org/wiki/3DES

块密码的工作模式,ECB,CBC,OFB和CFB等

http://zh.wikipedia.org/wiki/%E5%9D%97%E5%AF%86%E7%A0%81%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F

对多于一个块的加密

与其它的块密码一样,对多个数据块的加密和解密可以使用多种工作模式进行,而模式的定义可以与块密码算法相独立。

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)模式。需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。

Ecb encryption.png

Ecb decryption.png

1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式[14]。在CBC模式中,每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量

Cbc encryption.png

Cbc decryption.png

若第一个块的下标为1,则CBC模式的加密过程为

C_i = E_K(P_i \oplus C_{i-1}), C_0 = IV

而其解密过程则为

P_i = D_K(C_i) \oplus C_{i-1}, C_0 = IV

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 字节密钥。

所以是:

  • k1 != k2, k1 = k3, k2 != k3
    Read more:
    http://blog.fpmurphy.com/2010/04/openssl-des-api.html#ixzz1Y53wLqHJ
  • 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))

    原文地址:https://www.cnblogs.com/cute/p/2176400.html