Python 关于加密和解密

1、理解

加密是通过使用各种加密算法来对数据进行加密和解密的过程。Python 提供了许多内置库和第三方库,可以用于实现各种加密算法和技术,包括对称加密、非对称加密、哈希函数等。以下是 Python 中常用的一些加密相关的库和模块:

  1. hashlib 模块:Python 的 hashlib 模块提供了常见的哈希函数,如 MD5、SHA-1、SHA-256 等,用于生成数据的哈希值。
  2. cryptography 模块:cryptography 是一个功能强大且易于使用的加密库,支持对称加密、非对称加密、数字签名等操作。
  3. PyCrypto 模块:PyCrypto 是一个密码学工具包,提供了各种加密算法的实现,包括对称加密算法(如 AES、DES)、非对称加密算法(如 RSA)、消息认证码(MAC)等。
  4. PyCryptodome 模块:PyCryptodome 是 PyCrypto 的一个分支,提供了更多的加密算法和功能,并在性能和安全性上有所改进。
  5. cryptography.fernet 模块:cryptography 库中的 fernet 模块提供了 Fernet 对称加密算法的实现,用于简单且安全的加密和解密数据。
  6. PyJWT 模块:PyJWT 是用于 JSON Web Token(JWT)的 Python 库,用于生成和验证 JWT,通常用于身份验证和信息交换。

2、对称加密和非对称加密

对称加密和非对称加密是两种常见的加密算法,它们在加密和解密数据时使用不同的密钥管理方式。

  1. 对称加密

    • 定义:对称加密使用相同的密钥来加密和解密数据。加密和解密过程使用相同的密钥,因此称为对称加密。
    • 常见算法:常见的对称加密算法包括 AES(高级加密标准)、DES(数据加密标准)和 3DES 等。
    • 示例:以下是一个使用 PyCryptodome 模块进行 AES 对称加密和解密的简单示例:
    from Crypto.Cipher import AES
    from Crypto.Random import get_random_bytes# 生成随机密钥
    key = get_random_bytes(16)# 要加密的数据
    data = b"Hello, World!"# 创建 AES 加密对象
    cipher = AES.new(key, AES.MODE_EAX)# 加密数据
    ciphertext, tag = cipher.encrypt_and_digest(data)print("加密后的数据:", ciphertext)# 解密数据
    cipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
    decrypted_data = cipher.decrypt_and_verify(ciphertext, tag)print("解密后的数据:", decrypted_data.decode('utf-8'))
    
  2. 非对称加密

    • 定义:非对称加密使用一对密钥,公钥和私钥,其中公钥用于加密数据,私钥用于解密数据。这种加密方式也称为公钥加密。
    • 常见算法:常见的非对称加密算法包括 RSA、DSA 和 ECC(椭圆曲线加密)等。
    • 示例:以下是一个使用 cryptography 模块进行 RSA 非对称加密和解密的简单示例:
    from cryptography.hazmat.primitives.asymmetric import rsa
    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives.asymmetric import padding
    from cryptography.hazmat.primitives import hashes# 生成 RSA 密钥对
    private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
    public_key = private_key.public_key()# 加密数据
    data = b"Hello, World!"
    ciphertext = public_key.encrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))print("加密后的数据:", ciphertext)# 解密数据
    decrypted_data = private_key.decrypt(ciphertext, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))print("解密后的数据:", decrypted_data.decode('utf-8'))
    

加密和解密算法和方法比较多,在实际应用中,我们需要根据具体的安全需求和情景来选择合适的加密算法和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python知识点14---被规定的资源

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 在Python中被规定的东西不止有常识中的那些关键字、构造器等编程语言…

Python知识点4---循环语句

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python支持两种循环for和while,但是他们和其他的语言有些…

乡村振兴与农村环境整治:加强农村环境治理,改善农村人居环境,打造干净整洁、生态宜居的美丽乡村

目录 一、引言 二、农村环境整治的重要性 1、提升农民生活质量 2、促进农村经济发展 3、保护农村生态环境 三、当前农村环境面临的问题 1、垃圾处理不当 2、污水处理设施缺乏 3、农业面源污染严重 四、加强农村环境治理的措施 1、完善农村垃圾处理体系 2、加强农村…

14.Ollydbg的基本使用

上一个内容:13.优化界面化的游戏辅助 Ollydbg是一个调试工具,它可以一步一步的运行一个程序并且还能很直观的看到被调试程序的寄存器状态、栈状态。Ollydbg需要以管理员方式运行! 下图附加程序是调试一个正在运行的进程: 点击了…

STM32F103借助ESP8266连接网络

ESP8266配置 STM32F103本身是不具备联网功能的,所以我们必须借助其他单片机来进行联网,然后让STM32与联网单片机通信,就可以实现STM32联网了。 本文借助的是ESP8266模块,其通过UART协议与STM32通信(http://t.csdnimg.c…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑动态定价的新能源汽车能源站优化运行》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Nacos-SpringBoot-配置中心

Nacos配置中心 前情回顾 上一章呢 了解并且学习了Nacos服务注册与发现 在一系列破防中走了出来Nacos服务注册完成https://blog.csdn.net/m0_68711597/article/details/139265244?spm1001.2014.3001.5502 本以为接下来会一帆风顺 一马平川 没想刚出坑 又入坑 Nacos的配置…

Prime1 - 信息收集和分析能力的试炼

主机发现 nmap扫描与分析 端口22、80 详细扫描;linux、ubuntu、 udp扫描 端口都是关闭的 脚本扫描 web渗透 打开只有一张图片;源码有图片和一个alt:hnp security不知道有啥用,先记录下来吧 继续web渗透思路走吧,目录…

[Python]用Qt6和Pillow实现截图小工具

本文章主要讲述的内容是,使用python语言借助PyQt6和Pillow库进行简单截图工具的开发,含义一个简单的范围裁剪和软件界面。 主要解决的问题是,在高DPI显示屏下,坐标点的偏差导致QWidget显示图片不全、剪裁范围偏差问题。 适合有一点…

vivado BD_ADDR_SEG

按字母顺序排列的一类对象列表 BD_ADDR_SEG 描述 地址段或bd_addr_seg对象描述一个范围的位置和大小记忆力它们有一个范围(大小)和一个可选的起始偏移。对于各种内存映射的主接口和从接口,IP集成商遵循行业用于捕获存储器要求和能力的标准IP-…

爬楼梯 - LeetCode 热题 81

大家好!我是曾续缘😇 今天是《LeetCode 热题 100》系列 发车第 81 天 动态规划第 1 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法…

Android Kotlin 打开相册选择图片(多选)

1. 核心代码 打开系统相册功能,本代码使用两种方式打开本地相册,startActivityForResult 已经废弃,可以使用新的方式。 package com.example.facedetectordemoimport android.content.pm.PackageManager import androidx.appcompat.app.App…

【人工智能004】文本挖掘算法模型实战及经验总结(最近更新中)

1.熟悉、梳理、总结数据分析实战中的文本挖掘领域实战研发知识体系,这块领域很大,需要耗费很多精力,逐步总结、更新到位,,, 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来&am…

数据库与缓存⼀致性⽅案

数据库与缓存⼀致性⽅案 1、背景2、数据⼀致性⽅案设计3、数据⼀致性⽅案流程图4、关键代码4.1、 处理数据⼀致性的消息队列⼊⼝4.2、数据⼀致性配置的常量信息 1、背景 现有的业务场景下,都会涉及到数据库以及缓存双写的问题,⽆论是先删除缓存&#xf…

【Bug】修改计算机名称出现ip无法连接mysql数据库

解决: mysql -u root -p输入密码登录mysql服务器,那个ip是本机ip4的地址单ip放行。推荐全部,后面123456是密码 GRANT ALL PRIVILEGES ON *.* TO root192.168.0.109 IDENTIFIED BY 123456; 全部IP都放行 GRANT ALL PRIVILEGES ON *.* …

【移动端】商场项目路由设计

1:路由设计配置: 一级路由配置 分析项目,设计路由,配置一级路由 一级路由:单个页面独立展示的,都是一级路由,例如:登录页面,首页架子,报错页面 二级路由&…

Pycharm编辑器下自定义模块导入报错:no module named问题

相信很多使用pycharm 社区版编写python 程序的初学者都会遇到这样一个看似简单但是一时半刻找不到解决头绪的问题: 在同个目录下导入自己编写的模块到主程序的过程中,直接import的时候会报错:ModuleNotFoundError。 通过各种方法尝试以后还是…

美业SaaS收银系统源码-已过期卡项需要延期怎么操作?美业系统实操

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1.询问会员手机号和需要延期的卡项 2.PC运营后端-数据导入-修改已售卡项,搜索手机号 3.把需要卡项选…

0基础学游戏编程:从入门到精通的挑战与收获

0基础学游戏编程:从入门到精通的挑战与收获 游戏编程,对于许多初学者来说,可能是一个既神秘又充满吸引力的领域。从零开始学习游戏编程,不仅需要扎实的技术基础,还需要不断的实践和创新精神。本文将围绕四个方面、五个…

深入分析 Android BroadcastReceiver (一)

文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…