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简单生成随机姓名的方法示例

    下面就来详细讲解一下如何用Python生成随机姓名的方法。 生成姓氏 首先我们需要生成姓氏,通常我们可以使用已有的姓氏列表,很多基础库都可以提供这种列表。这里我们使用Python内置的random库来实现: import random # 姓氏列表 family_name_list = [‘赵’, ‘钱’, ‘孙’, ‘李’, ‘周’, ‘吴’, ‘郑’, …

    python 2023年5月20日
    00
  • Python 中random 库的详细使用

    下面是对“Python 中 random 库的详细使用”进行详细讲解的攻略。 一、什么是 random 库? random 库是 Python 标准库中的一个模块,它提供了用于生成随机数的函数。在进行数据处理、密码学、游戏编程等领域时,经常会使用到 random 库。 二、如何使用 random 库? 1. 随机整数 使用 random 模块中的 randi…

    python 2023年6月3日
    00
  • Python网络编程使用select实现socket全双工异步通信功能示例

    下面就是详细的 Python 网络编程使用 select 实现 socket 全双工异步通信功能的攻略。 1、什么是 select select 是一种 I/O 多路复用机制,它可以监控多个文件描述符,等待输入或输出操作就绪,从而实现启用一个线程或一个进程就能同时管理多个连接通道。 2、select 的优劣 优点:select 可以同时监听多个连接,无需通过…

    python 2023年5月19日
    00
  • 查看jupyter notebook每个单元格运行时间实例

    下面是查看jupyter notebook每个单元格运行时间的完整攻略。 1. 安装jupyter_contrib_nbextensions jupyter_contrib_nbextensions 是一个Jupyter Notebook的扩展包,提供了很多有用的插件。其中包括一个名为“ExecuteTime”的插件,可以方便地查看单元格的执行时间。 安装方…

    python 2023年6月3日
    00
  • Python网络编程之使用email、smtplib、poplib、imaplib模块收发邮件

    Python网络编程之使用email、smtplib、poplib、imaplib模块收发邮件 Python提供了多个模块来进行邮件的收发操作,其中包括email、smtplib、poplib和imaplib模块。本文将详细介绍这些模块的用法,并提供两个示例。 email模块 email模块提供了创建和解析邮件的功能。我们可以使用email模块来创建邮件对象…

    python 2023年5月15日
    00
  • python从入门到精通(DAY 1)

    当学习Python编程语言时,我们需要掌握一些基本概念和语法。以下是Python从入门到精通教程的第一天内容,请仔细阅读。 Python从入门到精通(DAY 1) Python简介 Python是一种高级编程语言,它被广泛用于Web开发、人工智能、数据科学等领域。Python语言简洁、易学易用,因此成为了众多开发者的首选语言之一。 Python安装 要开始学…

    python 2023年5月13日
    00
  • 树莓派 Crontab Python 脚本需要写权限

    【问题标题】:Raspberry Pi Crontab Python script needs write permission树莓派 Crontab Python 脚本需要写权限 【发布时间】:2023-04-04 02:34:01 【问题描述】: 我有一个 python 脚本,我想每 15 分钟在我的树莓派上运行一次。该脚本应该做一些事情,然后将报告发布…

    Python开发 2023年4月6日
    00
  • 用Python开发app后端有优势吗

    当使用Python来开发移动app后端时,有以下几点优势: 1. Python具有流行的Web框架和库 Python有许多流行的Web框架,如Django和Flask,可以快速搭建后端API和服务器。此外,Python有数量庞大的库和模块,如Pandas和NumPy,可以快速处理和分析后端数据。 2. Python具有易于学习和编写的语法 Python语法简…

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