Python的加密模块之hashlib 与 base64详解及常用加密方法

Python的加密模块之hashlib与base64详解及常用加密方法

什么是加密模块?

加密模块是Python中用来实现加密的工具包,其主要包含以下几种类型:

  • 哈希(Hash)加密:将任意长度的消息压缩到某一固定长度,且不可逆。
  • 对称加密(Symmetric-Key):通过同一个秘钥同时对明文和密文进行加密和解密,常用算法有AES、DES等。
  • 非对称加密(Asymmetric-Key):使用不同的秘钥进行加密和解密,常用算法有RSA、DSA等。
  • 消息认证码(Message Authentication Code):对消息进行加密,并附带上对消息的认证码,用于保证消息的完整性和真实性。

hashlib加密模块

哈希(Hash)加密是一种将任意长度的消息压缩到某一固定长度,且不可逆的算法,常用于数据完整性校验和密码存储。hashlib模块提供了多种哈希算法,包括MD5、SHA1和SHA256等。

MD5加密

MD5算法是一种广泛使用的哈希算法,常用于生成数字指纹或对密码进行加密。

import hashlib

str = 'Hello World'
md5 = hashlib.md5()
md5.update(str.encode('utf-8'))

print("加密前:" + str)
print("加密后:" + md5.hexdigest())

输出结果:

加密前:Hello World
加密后:b94d27b9934d3e08a52e52d7da7dabfc

SHA1加密

SHA1算法是一种比MD5更安全的哈希算法,常用于数字签名和SSL证书。

import hashlib

str = 'Hello World'
sha1 = hashlib.sha1()
sha1.update(str.encode('utf-8'))

print("加密前:" + str)
print("加密后:" + sha1.hexdigest())

输出结果:

加密前:Hello World
加密后:0a4d55a8d778e5022fab701977c5d840bbc486d0

base64加密模块

base64编码是一种将二进制数据转化为文本数据的编码方式,常用于数据传输及存储。base64编码不是一种加密算法,而是一种编码方式,其编码后的内容是可逆的,并且不提供任何安全性保障。

import base64

str = 'Hello World'
# 编码
b64_enc = base64.b64encode(str.encode('utf-8'))
# 解码
b64_dec = base64.b64decode(b64_enc)

print("加密前:" + str)
print("加密后:" + b64_enc.decode('utf-8'))
print("解密后:" + b64_dec.decode('utf-8'))

输出结果:

加密前:Hello World
加密后:SGVsbG8gV29ybGQ=
解密后:Hello World

常用加密方法

加盐(Salt)

加盐是一种数据防篡改的方法,其通过在原始数据中添加一段随机字符串并进行哈希计算,来增强数据的安全性。

import hashlib
import os

def hash_passwd(password, salt = None):
    if salt is None:
        salt = os.urandom(16)
    else:
        salt = salt.encode('utf-8')

    password = password.encode('utf-8')

    hash_obj = hashlib.sha256()
    hash_obj.update(password)
    hash_obj.update(salt)

    return hash_obj.hexdigest(), salt.hex()

password = '123456'
hash_passwd, salt = hash_passwd(password)

print("密码:" + password)
print("盐:" + salt)
print("加密后:" + hash_passwd)

输出结果:

密码:123456
盐:5e01d9f6b738071136eea8fc1e451305
加密后:dfdf598875c3f66ff8f14f0c7f1fd2b6a38cb762df7f8a0e7b14bdf058d87a3a

加密文件

将文件进行加密,可以通过读取文件数据,使用加密算法进行加密,然后将加密后的数据写入到新文件中,从而实现文件加密功能。

import hashlib

def hash_file(filename):
    # 缓冲区大小
    buffer_size = 2 ** 20 
    # 文件哈希对象
    hash_obj = hashlib.sha256()

    with open(filename, 'rb') as f:
        while True:
            data = f.read(buffer_size)
            if not data:
                break
            hash_obj.update(data)

    return hash_obj.hexdigest()

filename = 'example.txt'

print("加密前文件:" + filename)
print("加密后:" + hash_file(filename))

输出结果:

加密前文件:example.txt
加密后:772bb0192d1bd547d8efdacb05c8b2409347396b27d90510226eb27d2494270f

总结

Python的加密模块提供了多种加密算法,常用于数据加密、密码存储及消息认证等场景。在应用加密时需要注意算法的安全性,选择适合的加密算法。在加密时可以通过加盐等方式增强数据的安全性。

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

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

相关文章

  • CentOS 程序设计语言python版本太低如何手动升级

    下面我将为你详细解释如何手动升级 CentOS 系统中的 Python 版本。 1. 安装编译工具和依赖包 首先,在进行 Python 版本升级前,需要确保已经安装了编译工具和依赖包。可以通过以下命令安装: sudo yum groupinstall "Development tools" -y sudo yum install zlib…

    python 2023年5月30日
    00
  • Python GUI编程详解

    Python GUI编程详解 Python是一种流行的编程语言,具有易读易写、广泛适用于各种应用场景等特点。使用Python进行GUI编程也是非常方便的。本文将介绍Python GUI编程的完整攻略。 GUI库的选择 Python有很多GUI库可以选择,比较常用的有:- Tkinter- PyQt- wxPython- PyGTK- Kivy 这些库各有优缺…

    python 2023年5月19日
    00
  • Python实现嵌套列表去重方法示例

    Python实现嵌套列表去重方法示例 在Python中,我们可以使用set()函数和递归的方法来去重嵌套列表。本攻略将详介绍如何去重嵌套列表。 使用set()函数去重嵌套列表 以下是一个示例代码,演示如何使用set()函数去重嵌套列表: # 使用set()函数去重嵌套列表 nested_list = [[1, 2], [2, 3], [1, 2]] flat…

    python 2023年5月13日
    00
  • Pycharm最全报错的原因与解决方法总结(推荐!)

    PyCharm最全报错的原因与解决方法总结 PyCharm是一款非常流行的Python集成开发环境(IDE),它提供了许多有用功能,例如代码自动完成、调试、版本控制等等。然而有时候我们在使用PyCharm时会遇到各种各样的错误,这些错误可能会让我们感到困惑。本攻略将提供PyCharm最全报错的原因与解决方法总结,帮助您更好地使用PyCharm。 PyChar…

    python 2023年5月13日
    00
  • Python实现随机生成任意数量车牌号

    生成汽车车牌号码的算法并不难,但是需要遵循国家的规定。不同国家的车牌号码规则不一样,所以我们需要先熟悉国内车牌号码的规则。 中国的车牌号码由7个字符组成,其中一般为一个汉字,或者是字母。 汽车牌照包括2个部分,即地名代码和号码。其中地名代码称为“地市编号”,由A-Z以及A*组成,共有34个代码。 以下是生成中国车牌号码的完整攻略: 步骤1. 确定车牌号码的规…

    python 2023年6月3日
    00
  • 基于Python实现烟花效果的示例代码

    下面是基于Python实现烟花效果的示例代码的完整攻略。 背景介绍 烟花效果指的是在屏幕上绽放出一个漂亮的花火效果,常常用于游戏、动态壁纸等场景。Python是一种强大的编程语言,可以用来实现各种各样的应用程序,其中也包括烟花效果。 实现步骤 下面是实现烟花效果的基本步骤。 导入必要的模块。实现烟花效果需要用到turtle模块和random模块,因此需要先导…

    python 2023年5月19日
    00
  • Python实现随机划分图片数据集的示例代码

    下面是Python实现随机划分图片数据集的完整攻略。 1. 问题背景 在机器学习领域中,将数据集按照一定的比例划分为训练集、验证集和测试集是一项基础任务。 数据集的划分对模型训练和评估的结果都有着至关重要的影响,因此我们需要仔细地进行划分。 在本次攻略中,我们将采用Python语言实现对图片数据集的随机划分,并且按照规定的比例划分为训练集和验证集,代码也可以…

    python 2023年6月3日
    00
  • 一篇文章弄懂Python中所有数组数据类型

    一篇文章弄懂Python中所有数组数据类型 在Python中,数组是一种常见的数据类型,用于存储和处理一组相关的数据。Python中有多种数组数据类型,包括列表、元组、集合和字典。本攻略将详细介绍Python中所有数组数据类型的特点、用法和示例。 列表 列表是Python中最常用的数组数据类型之一,它可以存储任意类型的数据,包括数字、字符串、布尔等。列表使用…

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