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日

相关文章

  • Matplotlib自定义坐标轴刻度的实现示例

    针对这个话题,我将采取以下步骤来给出完整攻略: 介绍Matplotlib自定义坐标轴的概念和必要性 深入介绍Matplotlib自定义坐标轴刻度的实现方式 通过两个示例说明具体的实现过程 1. Matplotlib自定义坐标轴 Matplotlib是Python中最常用的可视化库之一,支持绘制各种类型的图表,其中包括线图、散点图、直方图等等。对于数据可视化,…

    python 2023年6月6日
    00
  • python数据可视化JupyterLab实用扩展程序Mito

    下面是“python数据可视化JupyterLab实用扩展程序Mito”完整攻略: 1. 什么是Mito? Mito是一款JupyterLab扩展程序,它提供了一种交互式数据可视化的方式,可以直接在Notebook中使用,并支持各种数据格式和图表类型。 2. Mito的安装和配置 使用Mito之前,需要先安装和配置好JupyterLab。安装JupyterL…

    python 2023年6月3日
    00
  • python实现统计文本中单词出现的频率详解

    下面就来详细讲解一下如何用Python实现统计文本中单词出现频率的攻略吧。 1. 读取文件 首先,我们需要从文本文件中读取文章内容。可以用Python内置的open()函数完成。例如我们有一个文件路径为/path/to/file.txt,可以用如下代码来读取文件中的内容并存储到变量中。 with open(‘/path/to/file.txt’, ‘r’) …

    python 2023年6月3日
    00
  • Python实现爬取天气数据并可视化分析

    Python实现爬取天气数据并可视化分析 本文将介绍如何使用Python爬取天气数据,并使用可视化工具对数据进行分析和展示。我们将使用BeautifulSoup库解析HTML文档,使用requests库获取网页数据,使用pandas库处理数据,使用matplotlib库进行可视化分析。 爬取天气数据 以下是一个示例代码,演示如何使用Python爬取天气数据:…

    python 2023年5月15日
    00
  • 如何利用python处理原始音频数据

    处理原始音频数据是一项重要任务,Python为处理音频的操作提供了一些库和工具,包括SciPy、NumPy、Soundfile等。下面提供一个完整攻略,来解释如何利用Python处理原始音频数据。 步骤1:导入所需的库 为了开始处理音频数据,我们需要先导入必要的库。Python中用于处理音频的一些常用库包括: numpy:处理数字信号 scipy:用于处理数…

    python 2023年5月14日
    00
  • Python中String模块示例详解

    Python中String模块示例详解 String模块简介 Python String模块提供了一系列对字符串的处理方法,这些方法包括字符串的格式化、大小写转化、字符替换、分割、连接等等。在进行字符串处理时,使用String模块可以更加方便、快捷的完成字符串操作。 String模块示例说明 使用String模块进行字符串格式化 Python String模…

    python 2023年5月18日
    00
  • Python注释详解

    Python注释详解 在编写代码时,注释是一个非常重要的组成部分。注释可以让其他人更好地理解你的代码,而且也可以让自己更容易地维护代码。Python中有两种方式来注释代码:单行注释和多行注释。 单行注释 单行注释是用于注释单行代码的情况。在Python中,单行注释以井号 # 开始。在井号后面输入注释内容即可。例如: # 这是一个单行注释 x = 10 # 这…

    python 2023年5月20日
    00
  • 利用Python pandas对Excel进行合并的方法示例

    我来为你讲解“利用Python pandas对Excel进行合并的方法示例”的完整实例教程。 1. 确定需要合并的表格 首先我们需要明确需要合并哪些Excel表格。假设我们需要合并以下两个表格: 表格1:orders_2021.xlsx order_id customer_id amount 1 1001 200.50 2 1002 500.00 3 100…

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