DES算法实例详解
python加密
3DES图示
DES 和 3DESDES 的密钥过短,现在已经不推荐使用了,所以这个库没有 DES 的算法封装,如果你需要使用这种算法,推荐用 pyDes 这个库。 DES 需要提供以下数据:
- key 秘钥,56, 112, 或者 168 位(bits)
- mode 加密方式,可以是 ECB 和 CBC
- IV 初始向量,CBC 方式必须提供,加密的 IV 和解密的 IV 必须一致。
- pad 补位字符串,如果补位方式是 Normal, 必须提供,如果补位方式是 PAD_PKCS5, 不需要提供。
- padmode 补位方式,可以是 Normal 和 PAD_PKCS5,建议 PAD_PKCS5
这个库使用 DES 加密,默认使用 ECB 方式,默认补位方式为 PKCS5 写法比较简单,得到的是一个 bytes 类型。
import pyDes key = 'mysecret' cipher = pyDes.des(key, padmode=pyDes.PAD_PKCS5) encrypted = cipher.encrypt('abc') # >>> b'vx02Jx867x8fQ\'
解密的 key, mode, IV, pad, padmode 都和加密时保持一致:
cipher = pyDes.des(key, padmode=pyDes.PAD_PKCS5) decrypted = cipher.decrypt(encrypted) # >>> b'abc'详细版加密
import pyDes key = 'mysecret' cipher = pyDes.des( key, mode=pyDes.CBC, # 模型 IV='', # IV pad= ' ', # 空格补位 padmode=pyDes.PAD_NORMAL ) encrypted = cipher.encrypt('abc') # >>> b'vx02Jx867x8fQ\'详细版解密
cipher = pyDes.des( key, mode=pyDes.CBC, # 模型 IV='', # IV pad= ' ', # 空格补位 padmode=pyDes.PAD_NORMAL ) decrypted = cipher.decrypt(encrypted) # >>> b'abc'
3DES 在 DES 的基础上增加了密钥长度,秘钥可以是 64, 128 或者 192 位(bits), 3DES 目前也不推荐使用,因为他的速度非常慢。
import pyDes import os key = os.urandom(16) cipher = pyDes.triple_des(key, padmode=pyDes.PAD_PKCS5) encrypted = cipher.encrypt('abc') # >>> b'DGFxxc6xb4xad@' cipher = pyDes.triple_des(key, padmode=pyDes.PAD_PKCS5) decrypted = cipher.decrypt(encrypted) # >>> b'abc'
在 cryptography 中的使用和 AES 基本一致,只需要把算法名称改一下就可以了。
from cryptography.fernet import ( Cipher, algorithms, modes, padding ) key = os.urandom(16) iv = os.urandom(8) cipher = Cipher( algorithm=algorithms.TripleDES(key), mode=modes.CBC(iv) ) encryptor = cipher.encryptor() padder = padding.PKCS7(128).padder() padder_data = padder.update(b'wyz') + padder.finalize() cipher_text = encryptor.update(padder_data) + encryptor.finalize()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)