密码学学习记录 11 / 15
- 密码学学习记录|hash md5 算法
- 密码学学习记录|hash md5 算法练习样本一
- 密码学学习记录|hash md5 算法练习样本二
- 密码学学习记录|hash sha1 算法
- 密码学学习记录|hash sha1 算法练习样本一
- 密码学学习记录|hash sha256 算法
- 密码学学习记录|hash sha256 算法练习样本一
- 密码学学习记录|hash sha512 算法
- 密码学学习记录|hash hmac 算法
- 密码学学习记录|des 加解密算法
- 密码学学习记录|des - 3des 算法
- 密码学学习记录|aes 加解密算法
- 密码学学习记录|aes dfa 练习样本一
- 密码学学习记录|aes dfa 练习样本二
- 密码学学习记录|aes dfa 练习样本三
参考资料
- 维基百科 3DES: https://zh.wikipedia.org/wiki/3DES
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元 才能查看此处内容!立即支付
注意该订单不支持退款,如有问题可联系博主