python使用Crypto库实现加密解密

news/2024/7/6 1:48:17 标签: python, 开发语言

一:crypto库安装

pycrypto,pycryptodome是crypto第三方库,pycrypto已经停止更新三年了,所以不建议安装这个库;pycryptodome是pycrypto的延伸版本,用法和pycrypto 是一模一样的;所以只需要安装pycryptodome就可以了

pip install pycryptodome

二:python使用crypto

1:crypto的加密解密组件des.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from Crypto.Cipher import DES
from binascii import b2a_hex, a2b_hex
class MyDESCrypt: #自己实现的DES加密类
    def __init__(self, key = ''):
        #密钥长度必须为64位,也就是8个字节
        if key is not '':
            self.key = key.encode('utf-8')
        else:
            self.key = '12345678'.encode('utf-8')
        self.mode = DES.MODE_CBC
    # 加密函数,如果text不足16位就用空格补足为16位,
    # 如果大于16当时不是16的倍数,那就补足为16的倍数。
    def encrypt(self,text):
        try:
            text = text.encode('utf-8')
            cryptor = DES.new(self.key, self.mode, self.key)
            # 这里密钥key 长度必须为16(DES-128),
            # 24(DES-192),或者32 (DES-256)Bytes 长度
            # 目前DES-128 足够目前使用
            length = 16   #lenth可以设置为8的倍数
            count = len(text)
            if count < length:
                add = (length - count)
                # \0 backspace
                # text = text + ('\0' * add)
                text = text + ('\0' * add).encode('utf-8')
            elif count > length:
                add = (length - (count % length))
                # text = text + ('\0' * add)
                text = text + ('\0' * add).encode('utf-8')
            self.ciphertext = cryptor.encrypt(text)
            # 因为DES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
            # 所以这里统一把加密后的字符串转化为16进制字符串
            return b2a_hex(self.ciphertext)
        except:
            return ""
    # 解密后,去掉补足的空格用strip() 去掉
    def decrypt(self, text):
        try:
            cryptor = DES.new(self.key, self.mode, self.key)
            plain_text = cryptor.decrypt(a2b_hex(text))
            # return plain_text.rstrip('\0')
            return bytes.decode(plain_text).rstrip('\0')
        except:
            return ""

2:crypto组件使用

from . import des
msg = "password is 961223"
key = "12345678"  #key值可传可不传
des1 = des.MyDESCrypt()
#加密
cipherTxt = des1.encrypt(msg)  #返回值为bytes型
print(cipherTxt)
#解密
decTxt = des1.decrypt(cipherTxt);  #返回值为str型
print(decTxt)


http://www.niftyadmin.cn/n/1583405.html

相关文章

Celery-------异步任务

Celery-------异步任务 1.什么是Celery?  Celery 是基于Python实现的模块, 用于执行异步定时周期任务的  其结构的组成是由   1.用户任务 app   2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ / backend 用于存储任务执行结果的   3.员工 worker 2…

[转载]Linux中的网络接口及LO回环接口

转自&#xff1a;https://blog.csdn.net/weixin_39863747/article/details/80564358 Linux中的网络接口及LO回环接口 2018年06月04日 10:55:03 weixin_39863747 阅读数&#xff1a;10491、linux的网络接口之扫盲 (1)网络接口的命名 这里并不存在一定的命名规范&#xff0c;但网…

laravel 安装

一&#xff1a;laravel安装1&#xff1a;laravel最新版安装composer global require "laravel/installer" #使用Composer下载Laravel安装程序 laravel new XXX #创建一个laravel项目,XXX为项目名称2&#xff1a;laravel指定版本安装composer create-project laravel…

Java 11 究竟比 8 快了多少?

阅读本文大概需要 1.2 分钟。作者&#xff1a;h4cd来源&#xff1a;开源中国社区开源规划调度引擎 OptaPlanner 官网发布了一个 Java 11 GC 性能基准测试报告。当前使用量最大的 Java 版本是 8&#xff0c;所以测试者用 Java 8 与 Java 11 进行对比测试。GC 是影响 Java 性能的…

laravel在视图中使用php代码

在laravel框架中,在视图文件中使用PHP代码使用到了Blade 模板引擎&#xff0c;Blade 是 laravel 提供的一个简单强大的模板引擎。它不像其他流行的 PHP 模板引擎那样限制你在视图中使用原生的 PHP 代码&#xff0c;事实上它就是把 Blade 视图编译成原生的 PHP 代码并缓存起来。…

Docker入门(三)使用Docker Compose

Compose介绍 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后&#xff0c;只需要一个简单的命令&#xff0c;就…

PYTHON2.day05

1.poll方法实现IO多路复用 p poll() p.register() p.unregister() p.poll() 2.epoll方法实现IO多路复用 * 效率更高 * 触发方式更多 * 可以监控的更多IO 3.struct模块 功能&#xff1a;python数据转换为bytes发送 Struct(fmt)生成数据格式对象…

ACM MM 论文 | 用于行人重识别的多层相似度感知CNN网络 ...

小叽导读&#xff1a; 行人重识别是指给定一个摄像头下某个行人的图片&#xff0c;在其他摄像头对应的图片中准确地找到同一个人。行人重识别技术有十分重要的科研和实际应用价值&#xff0c;近来广泛应用到交通、安防等领域&#xff0c;对于创建平安城市、智慧城市具有重要的意…