Python hashlib和hmac模块使用方法解析

Python hashlib和hmac模块使用方法解析

简介

哈希算法(HASH),又称散列算法,是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。当输入的消息内容一样时,计算出来的消息摘要也相同,不同输入的消息内容计算出来的消息摘要也不同。哈希算法广泛应用于数字签名、消息认证码、随机映射等领域。

Python的hashlib模块提供了多种哈希算法的支持,包括md5、sha系列等。而hmac模块则是在hashlib模块基础上实现了HMAC加密消息摘要算法。

本文将使用Python中的hashlib和hmac模块,详细讲解如何使用这两个模块进行哈希算法的计算。

hashlib模块

哈希算法的常见应用

哈希算法广泛应用于密码学领域,例如存储用户密码时,通常将用户明文密码经过哈希算法计算得到哈希值后再存储到数据库中;在文件传输过程中,可以使用哈希算法计算文件的哈希值,一般情况下发送方和接收方计算得到的哈希值一致则说明文件传输成功。

hashlib模块的常见操作

hashlib模块主要有四个函数用于计算哈希值,分别是md5、sha1、sha224和sha256。

  • md5

md5()函数用于计算字符串的MD5哈希值。示例代码如下:

import hashlib

# 计算字符串s的MD5哈希值
s = 'hello, world!'
md5 = hashlib.md5()
md5.update(s.encode('utf-8'))
print(md5.hexdigest())
  • sha1

sha1()函数用于计算字符串的SHA-1哈希值。示例代码如下:

import hashlib

# 计算字符串s的SHA-1哈希值
s = 'hello, world!'
sha1 = hashlib.sha1()
sha1.update(s.encode('utf-8'))
print(sha1.hexdigest())
  • sha224

sha224()函数用于计算字符串的SHA-224哈希值。示例代码如下:

import hashlib

# 计算字符串s的SHA-224哈希值
s = 'hello, world!'
sha224 = hashlib.sha224()
sha224.update(s.encode('utf-8'))
print(sha224.hexdigest())
  • sha256

sha256()函数用于计算字符串的SHA-256哈希值。示例代码如下:

import hashlib

# 计算字符串s的SHA-256哈希值
s = 'hello, world!'
sha256 = hashlib.sha256()
sha256.update(s.encode('utf-8'))
print(sha256.hexdigest())

示例代码

下面的示例代码使用hahlib模块计算文件的哈希值。

import hashlib

def calc_sha256(file_path):
    """计算文件的SHA-256哈希值"""
    sha256 = hashlib.sha256()
    with open(file_path, 'rb') as f:
        data = f.read(1024) # 每次读取1024字节
        while data:
            sha256.update(data)
            data = f.read(1024)
    return sha256.hexdigest()

if __name__ == '__main__':
    file_path = 'test.txt'
    print(calc_sha256(file_path))

hmac模块

HMAC算法的常见应用

HMAC算法是一种加密消息摘要算法,它需要一个密钥和消息,使用哈希算法计算出消息摘要,并将该摘要和密钥进行加密生成最终的加密消息摘要。HMAC算法广泛应用于数字签名、消息认证码等领域。

hmac模块的常见操作

hmac模块主要有两个函数用于计算HMAC,分别是hmac和new。

  • hmac

hmac(key, msg, digestmod)函数用于计算HMAC,其中key为密钥,msg为消息,digestmod为哈希算法。示例代码如下:

import hmac
import hashlib

# 计算'HMAC-SHA256'加密的消息摘要
key = 'secret'.encode('utf-8')
msg = 'hello, world!'.encode('utf-8')
h = hmac.new(key, msg, digestmod=hashlib.sha256)
print(h.hexdigest())
  • new

如果只想进行简单的哈希算法计算HMAC,可以使用new(key, msg=None, digestmod=None)函数进行计算。示例代码如下:

import hmac
import hashlib

# 计算'HMAC-SHA256'加密的消息摘要
key = 'secret'.encode('utf-8')
msg = 'hello, world!'.encode('utf-8')
h = hmac.new(key, digestmod=hashlib.sha256)
h.update(msg)
print(h.hexdigest())

示例代码

下面的示例代码使用hmac模块计算文件的HMAC值。

import hmac
import hashlib

def calc_hmac(file_path, key):
    """计算文件的HMAC值"""
    h = hmac.new(key, digestmod=hashlib.sha256)
    with open(file_path, 'rb') as f:
        data = f.read(1024) # 每次读取1024字节
        while data:
            h.update(data)
            data = f.read(1024)
    return h.hexdigest()

if __name__ == '__main__':
    file_path = 'test.txt'
    key = 'secret'.encode('utf-8')
    print(calc_hmac(file_path, key))

以上就是Python hashlib和hmac模块使用方法解析的完整攻略,希望能够对大家了解Python中哈希算法的应用有所帮助。

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

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

相关文章

  • C语言实现动态顺序表的实现代码

    让我来为大家详细讲解一下如何使用C语言实现动态顺序表的实现代码。 1. 动态顺序表的概述 动态顺序表是一种线性表,它基于数组实现。动态顺序表可以自动扩充或缩小其容量以存储数据。动态顺序表中元素的位置是按照它们在数组中的位置来确定的。它们在内存中是连续存储的,因此它们可以通过下标快速访问。 2. 动态顺序表的实现 我们使用C语言的方法来实现动态顺序表。首先,我…

    C 2023年5月23日
    00
  • c++ 内联函数和普通函数的区别

    C++中内联函数和普通函数都是函数的两种实现方式。内联函数是C++特有的一种函数实现方式,主要把函数的内容直接嵌入到调用语句中,而不是像普通函数那样调用函数。 内联函数和普通函数的区别 内联函数的调用时间和执行时间比普通函数更快。这是因为内联函数会把函数的内容嵌入到调用语句中,避免了函数调用的开销。而普通函数调用则需要跳转到函数执行的地址去执行。这样一来,在…

    C 2023年5月22日
    00
  • 你不知道的C++中namespace和using的用法实例

    下面将详细讲解关于C++中namespace和using的用法实例,内容包含两条示例说明。 1. namespace的用法实例 1.1 什么是namespace? 在C++中,命名空间(namespace)是一个用于区分不同部分代码的机制。当编写代码时,我们可能会使用许多标识符,例如变量名、函数名等。如果所有标识符都放在同一命名空间内,可能会出现重名的情况,…

    C 2023年5月23日
    00
  • 详解vs2022创建及调用.lib的方法

    下面是详解vs2022创建及调用.lib的方法。 1. 创建.lib文件 1.1 在Visual Studio 2022中创建新项目 打开Visual Studio 2022,点击“文件”菜单,选择“新建”和“项目”。 在“新建项目”窗口中,选择“Visual C++” -> “Windows桌面” -> “空项目”。然后为项目命名,例如“Dem…

    C 2023年5月23日
    00
  • C语言实现商品管理系统开发

    C语言实现商品管理系统开发攻略 介绍 本文将介绍如何使用C语言开发一个简单的商品管理系统。商品管理系统是指一个管理商品库存、添加商品信息、查询商品信息、删除商品信息等简单功能的系统。 步骤 1. 设计数据结构 在编写商品管理系统之前,需要先确定系统所需的数据结构。本系统的数据结构包括商品的名称、价格、库存量等信息。可以使用结构体(struct)来存储这些信息…

    C 2023年5月23日
    00
  • C语言关于文件的操作方法总结

    C语言关于文件的操作方法总结 文件操作是 C 语言中常用的功能之一。本文将综合介绍 C 语言操作文件的各种方法,包括打开文件、读取文件、写入文件、关闭文件,以及文件指针的使用。 打开文件 在 C 语言中,打开文件必须使用 fopen() 函数。这个函数有两个参数:文件名和打开模式。文件名是需要打开的文件名字符串,打开模式参数指定打开文件时的操作。 以下是一些…

    C 2023年5月23日
    00
  • Java使用线程池实现socket编程的方法详解

    Java使用线程池实现socket编程的方法详解 简介 Java中的线程池是用来管理和复用线程的工具。线程池可以减少线程的创建和销毁,节省了系统资源。在socket编程中,线程池可以避免创建大量的线程,优化程序性能。 线程池的实现 线程池的创建可以使用Java中的Executor或ExecutorService接口。这两个类都是Executor框架的一部分,…

    C 2023年5月23日
    00
  • Android实现城市选择三级联动

    Android实现城市选择三级联动攻略 在Android开发中,有时会需要实现城市选择功能,而且还需要支持三级联动,即选择省份后展示该省份下的市区列表,选择城市后展示该城市下的县区列表。这里提供一份Android实现城市选择三级联动的攻略。 一、搭建数据源 实现城市选择三级联动首先需要有一个完整的城市数据源,可以采用第三方库提供的数据,也可以自己搭建。以下是…

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