Python base64和hashlib模块及用法详解

Python base64和hashlib模块及用法详解

简介

在Python中,Base64和hashlib是常用的加密和解密模块,Base64模块用来处理二进制数据,将其转换为可打印的ASCII字符,而hashlib模块则用来生成各种哈希算法所需的数字摘要。以下是对这两个模块的详细介绍及使用方法。

Base64模块

Base64编码与解码方法

Base64编码是一种将二进制数据转换为ASCII字符的编码方式,常被用来在HTTP协议、电子邮件、网页等场景中传输和存储数据。Base64编码原理是将原始数据按照3个字节一组进行编码,每组3个字节总共有24位,而Base64编码后为4个字节一组,每组4个字节总共有32位,因此Base64编码后数据长度为原来的4/3。

Python中可以使用Base64模块进行Base64编码和解码。Base64模块提供了两个函数:base64.b64encode(data)base64.b64decode(data),分别用于对数据进行Base64编码和解码。其中,data是二进制形式的数据。

import base64

# Base64编码示例
data_encode = b"Python Base64 Example"
data_base64 = base64.b64encode(data_encode)
print(data_base64) # 输出 b'UHl0aG9uIEJhc2U2NCBFeGFtcGxl'

# Base64解码示例
data_decode = base64.b64decode(data_base64)
print(data_decode) # 输出 b'Python Base64 Example'

Base64的URL安全编码

Base64编码原本是用来在HTTP协议等场景中传输和存储数据,但有时会出现字符集不兼容的问题。为解决这个问题,Base64衍生出了URL安全编码。URL安全编码在Base64的编码过程中使用了一些URL安全、不易被转义、易传输的符号,例如使用-代替+,使用_代替/。Python中如下进行URL安全编码,其余同Base64编码/解码方法。

import base64

# URL安全编码示例
data_encode = b"Python Base64 Example"
data_base64_url = base64.urlsafe_b64encode(data_encode)
print(data_base64_url) # 输出 b'UHl0aG9uIEJhc2U2NCBFeGFtcGxl'

hashlib模块

常见哈希算法及用法

哈希算法是一种将任意长度的消息压缩到一定长度的消息摘要的算法。不同的哈希算法产生的摘要长度和强度不同,一些常见的哈希算法有MD5、SHA1、SHA256等。Python中的hashlib模块提供了这些常用的哈希算法实现,并提供了常用的API(Application Programming Interface)。

例如计算一个字符串的SHA256哈希值:

import hashlib

s = 'Python hashlib Example'
sha256 = hashlib.sha256()
sha256.update(s.encode('utf-8'))
print(sha256.hexdigest()) # 输出 54cbe52c7ba5e26b96b25845e95f56c81ea1d5d2bacf8d4e23fd90f3f44ed2e2

其中,首先创建一个sha256对象,然后通过update()方法向其中传入要计算哈希的数据,这里的数据为字节形式,需通过编码方式指明。接着通过hexdigest()方法计算哈希值并打印结果。

哈希算法的应用

哈希算法常被用来加密密码,为每个用户创建一个唯一的哈希值,并将其保存在数据库中。登录时,用户输入的密码也经过哈希运算,将其转换为哈希值,与数据库中保存的哈希值进行比对,以验证密码是否正确。

例如使用哈希算法SHA256加密密码并存储,以及登录认证流程:

import hashlib

# 用户注册,存储哈希值
def register(username, password):
    sha256 = hashlib.sha256()
    sha256.update(password.encode('utf-8'))
    pwd_hash = sha256.hexdigest()
    with open('users.db', 'a') as f:
        f.write(f'{username}:{pwd_hash}\n')

# 用户登录,认证哈希值
def login(username, password):
    sha256 = hashlib.sha256()
    sha256.update(password.encode('utf-8'))
    pwd_hash = sha256.hexdigest()
    with open('users.db', 'r') as f:
        for line in f:
            u, h = line.strip().split(':')
            if u == username and h == pwd_hash:
                print('Login successful!')
                return
        print('Username or password incorrect!')

# 用户注册示例
register('Alice', '123456')
register('Bob', '123456')
register('Charlie', '123456')

# 用户登录示例
login('Alice', '123456')
login('Bob', '654321') # 密码错误
login('Eve', '123456') # 用户名不存在

以上代码通过使用SHA256哈希算法实现了一个简单的用户注册和登录系统。其中,用户在注册时,输入用户名和密码,将密码进行哈希计算并存储在文件中;登录时,输入用户名和密码,哈希计算后与存储在文件中的哈希值进行比对。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python base64和hashlib模块及用法详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 如何在 Python 中解析字符串?

    【问题标题】:How can i parse a string in Python?如何在 Python 中解析字符串? 【发布时间】:2023-04-06 03:46:01 【问题描述】: 我通过串行连接向 python 发送一个字符串,格式如下 &5:420:0:03713031464@ 会被解析为: (start byte) (data len…

    Python开发 2023年4月7日
    00
  • 详解python的集合set的函数

    我来为你详细讲解一下Python的集合 set 的函数。 常用的 set 函数 创建 set 集合 我们可以使用 set 函数来创建一个集合,其用法如下所示: my_set = set([1, 2, 3, 4, 5]) print(my_set) # 输出集合 {1, 2, 3, 4, 5} 在上面的示例中,我们以列表对象作为参数传递给了 set 函数。se…

    python 2023年5月13日
    00
  • Python利用Xpath选择器爬取京东网商品信息

    Python利用Xpath选择器爬取京东网商品信息 简介 本文主要介绍如何使用Python的Xpath模块实现京东网商品信息的爬取。Xpath是一种支持路径选择的查询语言,常用于处理XML、HTML以及其他结构化文档的数据。本文将使用Python的Xpath模块和requests模块对京东网的商品信息进行爬取。 前提条件 在开始本文之前,请确保您已经安装了以…

    python 2023年5月14日
    00
  • python中从for循环延申到推导式的具体使用

    可以使用for循环通过遍历list或者其他可迭代对象进行迭代操作,但是循环语法有时不够简洁,可以使用Python的推导式实现同样的操作。 Python中的推导式是一种简洁、快速、简单的利用迭代器快速构建一个列表、字典或集合的方法,Python中有列表推导式,字典推导式和集合推导式三种。 列表推导式 列表推导式使用简单,使用一行代码就能快速构建一个列表: ne…

    python 2023年5月13日
    00
  • Python实现自动整理文件的脚本

    下面是详细的Python实现自动整理文件的脚本攻略,分为以下步骤: 1. 确定需要整理的文件路径 首先,需要确定需要整理的文件夹路径。可以使用os库中的listdir()函数列出文件夹中的所有文件,然后逐一处理这些文件。 import os folder_path = "/path/to/folder" files = os.listdi…

    python 2023年5月19日
    00
  • Python实现四舍五入的两个方法总结

    Python实现四舍五入的两个方法总结 方法一:round函数 在Python中,可以通过内置的round()函数实现四舍五入功能,其使用如下: a = round(3.1415926, 2) print(a) # 3.14 在上述例子中,3.1415926代表需要四舍五入的数字,2表示需要保留的小数位数。 如果保留的小数位数不指定,则默认为0,即对整数进行…

    python 2023年6月3日
    00
  • python处理列表的部分元素的实例详解

    来讲解一下 “python处理列表的部分元素的实例详解” 吧。 标题 我们首先需要添加一个一级标题来简述我们要讲解的内容,如下: Python处理列表的部分元素的实例详解 介绍 在Python中,列表是一种非常常见的数据类型,我们经常需要对列表进行操作来满足不同的需求。其中,处理列表的部分元素,是我们操作中非常重要的一个环节。比如说,我们可能需要取出一个列表…

    python 2023年5月14日
    00
  • Python3爬虫之自动查询天气并实现语音播报

    下面就是Python3爬虫之自动查询天气并实现语音播报的完整攻略。 一、准备工作 1.安装依赖库 requests:用于获取网页HTML内容 lxml:用于解析HTML内容 pyaudio:用于音频播放 SpeechRecognition:用于语音识别 gtts:Google Text-to-Speech,用于把文字转换成语音 安装命令如下: pip3 in…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部