Python加密技术全解析:从基础到实践

Python加密技术全解析:从基础到实践

在当今数字化时代,数据安全变得越来越重要。Python作为一种流行的编程语言,提供了多种加密技术来保护数据。本文将从基础的MD5算法开始,逐步深入到URL编码、Base64编码、对称加密、非对称加密,最后通过一个实际案例来展示如何解密加密数据。

一、MD5:不可逆的摘要算法

MD5是一种广泛使用的哈希算法,以其小巧、速度快和极难破解而著称。尽管王小云女士曾破解过MD5,但其在国内互联网公司中仍被广泛用作密码摘要算法。

1.1 MD5的特点

  • 不可逆:MD5算法的输出是固定的哈希值,无法从哈希值逆推出原始数据。
  • 确定性:相同的输入总是产生相同的输出。

1.2 Python中的MD5实现

from hashlib import md5obj = md5()
obj.update("alex".encode("utf-8"))
bs = obj.hexdigest()
print(bs)

1.3 避免撞库:加盐

为了提高安全性,可以在MD5计算时加入“盐”(salt),使得相同的输入产生不同的输出。

from hashlib import md5salt = "我是盐.把我加进去就没人能破解了"
obj = md5(salt.encode("utf-8"))
obj.update("alex".encode("utf-8"))
bs = obj.hexdigest()
print(bs)

二、URLEncode和Base64:编码与解码

URL编码和Base64编码是数据传输中常用的编码方式,它们将特殊字符转换为可传输的格式。

2.1 URL编码

URL编码将URL中的特殊字符转换为百分号编码的形式。

from urllib.parse import urlencode, unquoteparams = {"name": "alex", "age": "18"}
encoded_url = "http://www.example.com/?" + urlencode(params)
print(encoded_url)

2.2 Base64编码

Base64编码将二进制数据转换为由64个可打印字符组成的文本字符串。

import base64data = "hello world".encode("utf-8")
encoded_data = base64.b64encode(data).decode("utf-8")
print(encoded_data)

三、对称加密:AES和DES

对称加密使用相同的密钥进行加密和解密,常见的算法有AES和DES。

3.1 AES加密

from Crypto.Cipher import AESkey = b"alexissbalexissb"
aes = AES.new(key, AES.MODE_CBC, IV=b"0102030405060708")
data = "我吃饭了".encode("utf-8")
padded_data = data + (16 - len(data) % 16) * chr(16 - len(data) % 16).encode("utf-8")
encrypted_data = aes.encrypt(padded_data)
print(encrypted_data)

3.2 DES加密

from Crypto.Cipher import DESkey = b"alexissb"
des = DES.new(key, DES.MODE_CBC, IV=b"01020304")
data = "我要吃饭".encode("utf-8")
padded_data = data + (8 - len(data) % 8) * chr(8 - len(data) % 8).encode("utf-8")
encrypted_data = des.encrypt(padded_data)
print(encrypted_data)

四、非对称加密:RSA

非对称加密使用一对密钥,公钥加密,私钥解密。RSA是最常见的非对称加密算法。

4.1 RSA加密解密

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5# 生成密钥对
key = RSA.generate(1024)
private_key = key.exportKey()
public_key = key.publickey().exportKey()# 加密
rsa_pk = RSA.importKey(public_key)
rsa = PKCS1_v1_5.new(rsa_pk)
encrypted_data = rsa.encrypt(b"我要吃饭了")
print(encrypted_data)# 解密
rsa_pk = RSA.importKey(private_key)
rsa = PKCS1_v1_5.new(rsa_pk)
decrypted_data = rsa.decrypt(encrypted_data)
print(decrypted_data)

五、实战案例:解密网站数据

通过分析网站的数据传输过程,我们可以发现数据加密的规律,并编写相应的解密代码。

import binascii
from Crypto.Cipher import DESdef decrypt_data(data):key = "your_key_here"iv = "your_iv_here"des = DES.new(key.encode("utf-8"), DES.MODE_ECB)decrypted_data = des.decrypt(binascii.a2b_hex(data))return decrypted_data.decode("utf-8")# 示例数据
encrypted_data = "BB95CA71E232FD88B71C758B19BDDDCB..."
decrypted_data = decrypt_data(encrypted_data)
print(decrypted_data)

通过本文的介绍,我们了解了Python中常用的加密技术,并学习了如何将这些技术应用到实际的数据保护中。加密技术是保护数据安全的重要手段,掌握它们对于任何开发人员都是必要的。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于rk356x u-boot版本功能分析及编译相关(三)Makefile分析

🎏技术驱动源于热爱,祝各位学有所成。 文章目录 一、Makefile简要概述二、简要流程图三、Makefile文件具体分析大家好哈,这次因工作比较忙,文章更新拖的有些久了。哈哈,话不多说,咱们接着上次继续说u-boot的Makefile。 一、Makefile简要概述 一般要了解u-boot源码的编译…

shell(1)脚本创建执行与变量使用

shell(1)脚本创建执行与变量使用 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流&…

第5章总体设计-5.4 硬件可行性分析

5.4 硬件可行性分析 5.4.1 硬件方案评估1. 框式产品硬件可行性分析(1)机框设计可行性。(2)单板设计可行性。(3)核心功能器件选型。(4)数据流。 2. 盒式产品硬件可行性分析3. 终端产品…

TOIS24|推荐公平性的反事实解释

论文:https://arxiv.org/pdf/2307.04386 代码:https://anonymous.4open.science/r/CFairER-anony/. 关键词:可解释推荐;公平;反事实的解释;强化学习 1 动机 现有推荐系统存在的公平性问题,例如性别歧视和种族偏见等,…

week 3 - Assembly Language

Important Instructions and Syntax 此内容是以MASM编写的,你将使用Visual C/C内联汇编来编程,因此数据元素的声明有所不同,但概念和指令集(instruction sets)相同。 一、General-Purpose Registers 寄存器是CPU内的命名存储单元…

6.C操作符详解,深入探索操作符与字符串处理

C操作符详解,深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础…

校园导航系统

关于数据结构的一个整理: 1、链式有序表的合并 2、栈 3、队列 4、二叉树、哈夫曼报文 5、图论 6、十大排序 7、校园导航系统 文章目录 校园导航系统演示示例代码示例1、弧结点和顶点节点2、Map节点3、用户 校园导航系统 采用C语言涉及了数据库相关的操作&am…

食品进出库库存管理发货开单软件下载 佳易王食品进出库管理系统操作教程

一、概述 【软件资源下载在文章最后】 食品进出库库存管理发货开单软件下载 食品进出库管理系统操作教程 商品进出库管理软件是一款操作简便的进出库管理软件,管理入库,出库,库存,同时打印发货单。 二、软件操作教程 第一步&a…

C++和OpenGL实现3D游戏编程【连载18】——加载OBJ三维模型

1、本节课要实现的内容 以前我们加载过立方体木箱,立方体的顶点数据都是在程序运行时临时定义的。但后期如果模型数量增多,模型逐步复杂,我们就必须加载外部模型文件。这节课我们就先了解一下加载OBJ模型文件的方法,这样可以让编程和设计进行分工合作,极大丰富我们游戏效…

二刷代码随想录第四天

24. 两两交换链表中的节点 设置个虚拟头节点画图理清楚节点之间的指向关系 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new ListNode(0);dummyHead->next head;ListNode* cur dummyHead;while (cur->next ! nullptr &&…

【Linux】proc 文件系统详解

/proc 文件系统是 Linux 内核提供的一种特殊的文件系统,它主要用于显示内核和进程的信息。/proc 文件系统是一个虚拟文件系统,这意味着它并不占用实际的磁盘空间,而是由内核动态生成的内容。通过 /proc 文件系统,用户可以读取系统…

Linux文件系统

Linux文件系统 Linux 文件系统是 Linux 操作系统中用于存储和组织文件的结构。以下是一些关键概念和常见的 Linux 文件系统类型: 关键概念 文件系统层次结构:Linux 使用统一的文件系统层次结构,所有文件和目录都从根目录 / 开始。 目录结构…

[1.15.X-1.18.X]Herobrine-吾王HIM插件

Herobrine 这款插件99%自定义!为你的服务器增加一个吓人的HIM,该插件是一个非玩家角色,由 Minecraft 的粉丝创建。从来没有真正成为 Minecraft 游戏的一部分,这个故事是他在 Minecraft 世界里出没,Mojang 通过开玩笑地将“移除的 …

CTF 取证技术

01 流量分析 筛选器的使用 追踪流 文件导出 实例:通过筛选 http ,推断出 攻击者很可能 是 执行一个 文件上传 的攻击hack.php 很可能就是 攻击者 上传的 webshell依次进行 http 的 追踪流 查看查看到最后,发现响应中 有 PK文件头的存在 ,说…

【GPIO】3.上/下 拉电阻通讯中的作用

一.什么是上/下拉电阻 上拉、下拉电阻统一称为拉电阻,作用是将状态不确定的信号线通过一个电阻将其箝位至高电平(上拉)或低电平(下拉) 这里有人可能会疑惑? 什么叫状态不确定的信号? 在数字电…

分享购:前期布局与后期问题解决策略

在当今电商与消费模式不断创新的时代,分享购作为一种极具潜力的商业模式,正受到越来越多的关注。然而,要想让分享购真正发挥优势、实现可持续发展,无论是前期的精心布局,还是后期妥善应对各类问题,都至关重…

51c大模型~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/11908179 #HITS 北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率 单元测试是软件开发流程中的一个关键环节,主要用于验证软件中的最小可测试单元,函数或模块是否按预期工作…

中断与异常处理:走进代码

在操作系统的核心部分,中断(Interrupt)和异常(Exception)的处理机制是不可或缺的基础。它们的设计决定了系统的响应能力、稳定性和可扩展性。本文将深入探讨 Linux 内核中的中断与异常处理机制,并结合更多实…

智慧社区管理系统平台全面提升物业管理效率与用户体验

内容概要 随着科技的发展,智慧社区管理系统平台应运而生,成为现代物业管理的重要工具。这个平台通过整合多种先进的管理手段,为物业服务提供了全新的解决方案。智慧社区管理系统的核心在于其高效、便捷、智能的特点,最大程度地提…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数 前言一、什么是 datatable 参数?Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …