密码算法之DES---3DES原理

密码算法之DES---3DES原理,第1张

密码算法之DES---3DES原理 肩膀

DES算法实例详解

python加密

3DES图示

DES 和 3DES

DES 的密钥过短,现在已经不推荐使用了,所以这个库没有 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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5432751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存