Python base64和hashlib模块及用法详解

yizhihongxing

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 正则表达式 反斜杠(/)的麻烦和陷阱

    当在Python中使用正则表达式时,反斜杠字符(\)可能会导致一些麻烦和陷阱。这是因为反斜杠在Python中有特殊的含义,例如用于转义字符。因此,如果您想在正则表达式中使用反斜杠,您需要小心处理。 以下是两个示例,说明如何在Python中使用正则表达式时避免反斜杠的问题: 示例1:匹配文件路径 假设您想匹配一个文件路径,例如/home/user/file.t…

    python 2023年5月14日
    00
  • python输出带颜色字体实例方法

    让我来详细讲解一下“python输出带颜色字体实例方法”的完整攻略吧。 1. 简介 在Python中,我们可以使用ANSI Escape Code来输出带颜色的字体。ANSI Escape Code是一些控制字符,可以用来在终端中控制文本的颜色、样式等属性。我们可以利用这些控制字符,来让Python输出带颜色的字体。 2. 实现方法 下面是Python输出带…

    python 2023年6月5日
    00
  • 在python带权重的列表中随机取值的方法

    在Python中,可以通过random.choices方法在带有权重的列表中随机取值,该方法可以根据指定的权重值,生成符合要求的随机数列表。 具体步骤如下: 导入random模块 import random 定义带有权重的列表 假设有一个列表,包含不同的元素和它们的权重值。 my_list = [‘A’, ‘B’, ‘C’, ‘D’] my_weights …

    python 2023年6月3日
    00
  • python多行字符串拼接使用小括号的方法

    使用小括号的方法是python中常用的多行字符串拼接方式,使用该方法可以使代码更加美观、易读。下面是详细的攻略: 1. 什么是多行字符串? 多行字符串指的是一个字符串占据多行,通常在长文本、说明文档等场景下被使用。 在python中,多行字符串可以使用三引号(”’ 或 “””)来创建。 示例代码: long_text = ”’ 这是一个非常长的字符串, …

    python 2023年6月5日
    00
  • python利用不到一百行代码实现一个小siri

    我来详细讲解下如何利用不到一百行代码实现一个小siri。 1. 确定需要的模块 首先你需要确定你需要使用的Python模块,比如在实现一个小siri这个需求下,我们需要用到以下模块: speech_recognition:用于语音识别,可以将文字转化为语音。 pyttsx3:用于语音合成,可以将文字转化为语音。 datetime:用于获取当前日期和时间。 2…

    python 2023年6月2日
    00
  • 教你使用python搭建一个QQ机器人实现叫起床服务

    教你使用Python搭建一个QQ机器人实现叫起床服务 QQ机器人是基于 QQ 聊天软件平台而产生的一种基于 QQ 协议的机器人,它可以通过你的 QQ 帐号来接受指令并进行自动化操作,比如自动回复、定时发送消息等。在本篇攻略中,将介绍如何利用 Python 语言搭建一个 QQ 机器人,来实现每日叫起床的服务。 准备工作 注册一个腾讯云开发者帐号并登录。进入腾讯…

    python 2023年5月23日
    00
  • Python中最好用的命令行参数解析工具(argparse)

    让我来为您详细讲解 Python 中最好用的命令行参数解析工具 argparse,并提供两个示例说明。 什么是 argparse argparse 是 Python 内置模块中的一个命令行参数解析器,可以用于开发 Python 命令行工具和脚本,使得程序可以接收用户输入的命令行参数,并进行相关的处理和操作。argparse 可以解析各种类型的命令行参数,包括…

    python 2023年6月3日
    00
  • Python列表推导式,元组推导式,字典推导式,集合推导式

    Python 列表推导式、元组推导式、字典推导式和集合推导式是 Python 的高级语法,可以将一个可迭代对象快速转化为另一个可迭代对象,并且具有简洁、易读、高效的特点。 列表推导式 列表推导式是一种语法,允许根据已有列表快速构建另一个新的列表,语法如下: [expression for item in iterable if condition] 其中,e…

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