首页 > 编程语言 >【Python】Crypto模块_ DES 加解密

【Python】Crypto模块_ DES 加解密

时间:2023-03-04 14:12:11浏览次数:42  
标签:Python text self DES 加解密 mode key data

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))

 执行结果

 

标签:Python,text,self,DES,加解密,mode,key,data
From: https://www.cnblogs.com/phoenixy/p/17108881.html

相关文章

  • 判断jupyter中python解释器的版本
    查看解释器中的python版本importsysprint(sys.executable)print(sys.path)#更具体查看jupyternotebook中shell的版本信息!whichpython类似命令whereispyth......
  • python利用opencv实现本地图片的识别与结果存储
    准备阶段准备三个目录一个放识别好的人脸标本,一个放需要识别的照片,一个放识别后的结果比如:需要安装opencv包、dlib包,以及下载人脸数据,参照:​​python利用opencv读取摄像头......
  • python 读写stata
    importpandasaspdfrompandas.io.stataimportStataReader,StataWriterfile="cfps2020famconf_202301.dta"stata_data=StataReader(file,convert_categoricals......
  • 关于目录问题的总结-Python
    关于目录问题的总结os.makedirsos.makedirs(name,mode=0o777,exist_ok=False)作用用来创建多层目录(单层请用os.mkdir)参数说明name:你想创建的目录名mode:要......
  • Singleton Design Parttern
    单例模式是最常见也是最简单的设计模式,保证一个类只有一个实例并且提供一个全局访问点,主要解决实例被频繁的创建和销毁可能带来内存消耗问题。单例模式的特点:  1、私......
  • python 递归创建文件夹os.makedirs(转载)
    os.makedirs(name,mode=0o777,exist_ok=False)作用用来创建多层目录(单层请用os.mkdir)参数说明 name:你想创建的目录名mode:要为目录设置的权限数字模式,默认的模式为......
  • python中argsort()
    由于想使用python用训练好的caffemodel来对很多图片进行批处理分类,学习过程中,碰到了argsort函数,因此去查了相关文献,也自己在python环境下进行了测试,大概了解了其相关的用处,......
  • 使用Python调用新版ChatGPT接口
    OpenAI推出了基于“gpt-3.5-turbo”模型的全新API,其基础是支持ChatGPT的GPT3.5模型,取代了此前的“text-davinci-003.”。全文介绍如何使用python调用openAI的新版API。......
  • 摘录一下Python列表和元组的学习笔记
    1基础概念列表一个值,列表值指的是列表本身,而不是列表中的内容列表用[]表示列表中的内容称为表项len()函数可以显示列表中表项的个数,比如下面这个例子spam=['cat'......
  • [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
    雅达利大崩溃回忆上次内容个人计算机浪潮已经来临苹果公司迅速发展微软公司脱离mits准备做纯软件公司IBM用大型机思路制作的5100惨败Commodore64既做......