【Python】Crypto模块_ DES 加解密

1、了解

DES算法是一种经典的对称算法,即加密数据和解密数据用的密钥是同一个。

DES算法的最主要的内容有三个:Key、Data、Mode。

  Key:密钥(密钥长度为64位二进制,即8个字节的长度。其中有8位是校验位)

  Data:加密数据或解密数据(每64位即8字节位一块,按块进行加解密)

  Mode:加密操作、解密操作

 

2、python 代码

import base64
from Crypto.Cipher import DES


class DESCrypt:
    def __init__(self, key, mode, iv):
        self.key = key  # 密钥
        self.mode = mode  # 模式
        self.iv = iv  # 初始化向量

    def encrpyt(self, text):
        '''加密'''

        num = DES.block_size - len(text) % DES.block_size  # 需要填充的字符个数
        text_pad = (text + num * chr(num)).encode('utf-8')  # 填充后的字节串
        crpytor = DES.new(self.key, self.mode, self.iv)
        encrypt_data = crpytor.encrypt(text_pad)  # 对数据进行加密
        return base64.b64encode(encrypt_data).decode()

    def decrypt(self, text):
        '''解密'''

        data = base64.b64decode(text.encode())
        crpytor = DES.new(self.key, self.mode, self.iv)
        decrypt_data = crpytor.decrypt(data)  # 对数据进行解密
        res = decrypt_data[:-decrypt_data[-1]].decode()  # 去除多余字符
        return res


if __name__ == '__main__':
    # key = random._urandom(8) 可以利用random模块随机生成
    # key = b'C\xc5\xa0\x04!\xe3\xd59'  # 密钥,固定8个字节长度
    key = b'sync_key'  # 密钥,固定8个字节长度
    mode = DES.MODE_CBC
    iv = b'\x9a\xf8\xad\xeb.\xb7B\xe1'  # 初始化向量,固定8个字节长度
    des = DESCrypt(key, mode, iv)
    text = input('请输入需要DES加密的数据:')
    en_data = des.encrpyt(text)
    print('%s 经过加密得到:%s' % (text, en_data))
    de_data = des.decrypt(en_data)
    print('%s 经过解密得到:%s' % (en_data, de_data))

 执行结果

 

posted @ 2023-03-04 14:02  Phoenixy  阅读(1126)  评论(0编辑  收藏  举报