密码学学习记录|des - 3des 算法

密码学学习记录 13 / 18

参考资料

3DES

概述

3des 顾名思义,就是三重 des,对每个数据块(data block)都进行三次 des 加解密。key 的长度需要 16 - 24 bytes

原理

其具体流程如下:
假设 EN, DE 表示加密解密过程,K1-K3 表示密钥,D 表示明文,E 表示密文
加密过程:E = EN-K3(DE-K2(EN-K1(D)))
解密过程:D = DE-K1(EN-K2(DE-K3(E)))

Python 实现

代码的话,直接拿上一篇的 des 代码,改改就可以了,下面是代码,直接贴出来

demo 测试函数

def main():
    data = '1234567'
    key1 = 'aaaaaaaa'
    key = 'aaaaaaaa' + 'bbbbbbbb'
    iv = 'aaaaaaaa'
    pad = '0'

    des1 = DES(key=key, mode=DES.ECB, pad_mode=DES.PAD_PKCS5, des_type=DES.DES3)
    print('3des enc main1: ', bytes.hex(des1.encrypt(data)))
    print('3des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key, pad=pad, mode=DES.ECB, pad_mode=DES.PAD_NORMAL, des_type=DES.DES3)
    print('3des enc main1: ', bytes.hex(des1.encrypt(data)))
    print('3des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key, iv=iv, mode=DES.CBC, pad_mode=DES.PAD_PKCS5, des_type=DES.DES3)
    print('3des enc main1: ', bytes.hex(des1.encrypt(data)))
    print('3des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key, iv=iv, pad=pad, mode=DES.CBC, pad_mode=DES.PAD_NORMAL, des_type=DES.DES3)
    print('3des enc main1: ', bytes.hex(des1.encrypt(data)))
    print('3des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    print('')

    des1 = DES(key=key1, mode=DES.ECB, pad_mode=DES.PAD_PKCS5)
    print(' des enc main1: ', bytes.hex(des1.encrypt(data)))
    print(' des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key1, pad=pad, mode=DES.ECB, pad_mode=DES.PAD_NORMAL)
    print(' des enc main1: ', bytes.hex(des1.encrypt(data)))
    print(' des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key1, iv=iv, mode=DES.CBC, pad_mode=DES.PAD_PKCS5)
    print(' des enc main1: ', bytes.hex(des1.encrypt(data)))
    print(' des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

    des1 = DES(key=key1, iv=iv, pad=pad, mode=DES.CBC, pad_mode=DES.PAD_NORMAL)
    print(' des enc main1: ', bytes.hex(des1.encrypt(data)))
    print(' des dec main1: ', des1.decrypt(des1.encrypt(data)).decode())

if __name__ == '__main__':
    main()

demo 测试结果

3des enc main1:  2771c9b8cba7daf5
3des dec main1:  1234567
3des enc main1:  6bc55b2193913ea7
3des dec main1:  1234567
3des enc main1:  9c9ae3e67fd5a1e3
3des dec main1:  1234567
3des enc main1:  d6d1016413a7269b
3des dec main1:  1234567

 des enc main1:  f62c6942e0799c23
 des dec main1:  1234567
 des enc main1:  b578ba63669eb5a3
 des dec main1:  1234567
 des enc main1:  f29e387a0922d2cf
 des dec main1:  1234567
 des enc main1:  f9ce36e7aae38ba5
 des dec main1:  1234567

全部代码

您需要先支付 39.9元 才能查看此处内容!立即支付

注意该订单不支持退款,如有问题可联系博主

暂无评论
本文作者:
本文链接: https://www.qinless.com/?p=1348
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

发表评论

返回顶部