zoukankan      html  css  js  c++  java
  • 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))

查看全文
  • 相关阅读:
    关于Maven项目build时出现No compiler is provided in this environment的处理
    freemaker的函数使用
    FTP在docker容器中上传失败解决,改为被动模式
    linux重定向及nohup不输出的方法
    手动抠下的wordpress登录页面样式
    使用后端生成图片验证码流文件(不推荐)
    部署到docker容器后图片验证码显示不出来
    Linux修改profile文件改错了,恢复的方法
    DotNETCore 学习笔记 异常处理
    DotNETCore 学习笔记 路由
  • 原文地址:https://www.cnblogs.com/cute/p/2176400.html
  • Copyright © 2011-2022 走看看