Python crypto包功能的使用解读

 更新时间:2025年09月21日 16:09:55   作者:追逐此刻  
文章概述了Python中常用的加密库(如cryptography、pycryptodome、hashlib、bcrypt)及其用途,强调选择合适工具的重要性,并指出安全实践如避免MD5/SHA-1、妥善保管密钥等关键注意事项

在Python中,crypto相关的包通常用于加密、解密、哈希和其他密码学操作。以下是几个常见的与crypto相关的Python包及其作用:

1. 什么是“加密”?​​

加密就像把一封信放进一个带锁的盒子里,只有有钥匙的人才能打开看。在计算机里,加密的作用是:

  • 保护隐私​:比如你的密码、银行卡号不能让别人看到。
  • 防止篡改​:比如下载的文件不能被坏人偷偷修改。
  • 安全通信​:比如微信聊天内容不会被黑客偷看。

Python 的 crypto 相关包就是用来做这些事情的!

​2. Python 常用的加密包​

​​(1)cryptography(最推荐)​​

作用​:一个超级安全的工具箱,可以做各种加密操作。

能干什么?​

  • 加密/解密​:比如用密码锁住文件,只有知道密码的人能打开。
  • 数字签名​:比如你写了一份合同,用你的“签名”证明是你写的,别人不能伪造。
  • 生成安全密码​:比如自动生成一个超级复杂的密码,黑客猜不到。

示例​(加密一段文字):

from cryptography.fernet import Fernet

# 生成一个钥匙(必须保存好,丢了就打不开了!)
key = Fernet.generate_key()

# 用钥匙创建一个“锁”
cipher = Fernet(key)

# 加密一段文字(比如"Hello")
encrypted = cipher.encrypt(b"Hello")

# 解密
decrypted = cipher.decrypt(encrypted)
print(decrypted)  # 输出 b"Hello"

​​(2)pycryptodome(功能强大)​​

作用​:比 cryptography 更底层,支持更多加密算法。

能干什么?​

  • AES加密​(银行级加密,比如支付宝用的就是这种)。
  • RSA加密​(比如网站用 HTTPS 保护你的密码)。
  • 计算文件的哈希值​(比如下载软件时检查文件是否被篡改)。

示例​(用 AES 加密):

from Crypto.Cipher import AES

# 钥匙必须是16字节(比如 b'16-byte-key-12345')
key = b'16-byte-key-12345'

# 创建一个加密器
cipher = AES.new(key, AES.MODE_EAX)

# 加密数据
data = b"Secret Message"
ciphertext, tag = cipher.encrypt_and_digest(data)

# 解密
cipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
decrypted = cipher.decrypt_and_verify(ciphertext, tag)
print(decrypted)  # 输出 b"Secret Message"

​​(3)hashlib(Python 自带,计算哈希)​​

作用​:计算“指纹”(哈希值),用来验证数据是否被修改。

能干什么?​

  • 检查密码​:比如你注册时输入的密码会被转换成哈希值存储,下次登录时对比哈希值,而不是直接存密码。
  • 验证文件​:比如下载一个软件,计算它的哈希值,确保没被病毒修改。

示例​(计算 SHA-256 哈希值):

import hashlib

# 计算 "Hello" 的哈希值
hash_obj = hashlib.sha256(b"Hello")

# 得到哈希值(一串固定长度的字母数字)
print(hash_obj.hexdigest())
# 输出:185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969

注意​:哈希是单向的,不能反向解密(不像前面的加密可以解密)。

​​(4)bcrypt(专门存密码)​​

作用​:安全存储用户密码,防止黑客破解。

为什么不用普通哈希?​

  • 普通哈希(如 SHA-256)计算太快,黑客可以暴力.破解。
  • bcrypt 会故意变慢,让黑客破解更难。

示例​(存储和验证密码):

import bcrypt

# 1. 用户注册时,哈希密码
password = b"my_password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())  # 加盐(更安全)

# 2. 用户登录时,检查密码
input_password = b"my_password"
if bcrypt.checkpw(input_password, hashed):
    print("密码正确!")
else:
    print("密码错误!")

​3. 什么时候用哪个包?​​

​你要做什么?​​​用哪个包?​​
加密/解密数据(如文件)cryptography 或 pycryptodome
存储用户密码bcrypt
计算哈希值(如校验文件)hashlib
网络加密(如 HTTPS)ssl(Python 自带)

​4. 注意事项(超级重要!)​​

  1. 不要自己发明加密算法​!用现成的库(如 cryptography),自己写的很容易被破解。
  2. 密钥(密码)要保管好​!如果别人拿到你的密钥,就能解密你的数据。
  3. 不要用 MD5/SHA-1​!它们已经不安全了,推荐用 SHA-256 或 bcrypt
  4. 加密不是万能的​!如果电脑有病毒,加密也可能被破解。

​5. 总结​

  • 加密​ = 把数据变成乱码,只有有钥匙的人能还原。
  • 哈希​ = 计算数据的“指纹”,用来验证是否被修改。
  • Python 的 crypto 包(如 cryptographypycryptodomehashlib)就是干这些事的!
  • 存储密码用 bcrypt,加密数据用 cryptography,计算哈希用 hashlib

1. ​cryptography

作用​:一个现代、安全的密码学库,提供高级和低级接口。

功能​:

  • 对称加密(如AES)
  • 非对称加密(如RSA、ECC)
  • 哈希(如SHA-256)
  • 数字签名
  • 密钥生成与管理

示例​:

from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher = Fernet(key)
encrypted = cipher.encrypt(b"Hello, World!")
decrypted = cipher.decrypt(encrypted)

2.​pycryptodome/pycryptodomex

作用​:PyCrypto的替代品,支持广泛的密码学算法。

功能​:

  • 对称加密(AES、DES、ChaCha20)
  • 非对称加密(RSA、DSA)
  • 哈希(SHA、MD5)
  • 随机数生成
  • 数字签名

示例​:

from Crypto.Cipher import AES
key = b'16-byte-key-12345'
cipher = AES.new(key, AES.MODE_EAX)
data = b"Secret message"
ciphertext, tag = cipher.encrypt_and_digest(data)

3. ​hashlib(Python标准库)​

作用​:提供常见的哈希算法(如SHA-1、SHA-256、MD5)。

示例​:

import hashlib
hash_obj = hashlib.sha256(b"Hello")
print(hash_obj.hexdigest())

4. ​ssl(Python标准库)​

作用​:用于TLS/SSL加密通信(如HTTPS)。

功能​:

  • 证书验证
  • 安全套接字通信

示例​:

import ssl
context = ssl.create_default_context()

5.bcrypt

作用​:专为密码哈希设计的库(抗暴力.破解)。

示例​:

import bcrypt
password = b"super-secret"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())

6. ​paramiko(SSH相关)​

作用​:实现SSH协议,用于加密的远程连接。

功能​:

  • SSH客户端/服务器
  • SFTP文件传输

注意事项

  1. 安全性​:避免使用已弃用的库(如pycrypto),优先选择cryptographypycryptodome
  2. 哈希算法​:MD5和SHA-1已不安全,推荐SHA-256或bcrypt。
  3. 密钥管理​:密钥应通过安全方式(如环境变量)存储,而非硬编码。

总结

  • 通用加密​:cryptographypycryptodome
  • 密码哈希​:bcryptargon2
  • 简单哈希​:hashlib
  • 网络加密​:sslparamiko

根据需求选择合适的工具,并始终遵循最佳安全实践!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python 解决selenium 中的 .clear()方法失效问题

    python 解决selenium 中的 .clear()方法失效问题

    这篇文章主要介绍了python 解决selenium 中的 .clear()方法失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Python的pip在命令行无法使用问题的解决方法

    Python的pip在命令行无法使用问题的解决方法

    PIP是通用的Python包管理工具,提供了对 Python 包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Python包时,都要用到pip,许多人在第一次使用pip的时候都会出现'pip' 不是内部或外部命令,所以本文介绍了Python的pip在命令行无法使用问题的解决方法
    2025-05-05
  • 解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题

    解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题

    这篇文章主要介绍了解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python如何通过Flask-Mail发送电子邮件

    Python如何通过Flask-Mail发送电子邮件

    这篇文章主要介绍了Python如何通过Flask-Mail发送电子邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python完成FizzBuzzWhizz问题(拉勾网面试题)示例

    python完成FizzBuzzWhizz问题(拉勾网面试题)示例

    这篇文章主要介绍了python完成FizzBuzzWhizz问题(拉勾网面试题)示例,需要的朋友可以参考下
    2014-05-05
  • Python实现自动记录复制的文本并保存

    Python实现自动记录复制的文本并保存

    这篇文章主要为大家详细介绍了如何使用Python开发一个小工具,可以实现记录你复制的文本内容并自动保存,这样就再也不怕搞丢灵感或者代码段啦
    2025-04-04
  • python批量提取图片信息并保存的实现

    python批量提取图片信息并保存的实现

    这篇文章主要介绍了python批量提取图片信息并保存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python中分支语句与循环语句实例详解

    Python中分支语句与循环语句实例详解

    这篇文章主要给大家介绍了关于Python中分支语句与循环语句的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Python实现从脚本里运行scrapy的方法

    Python实现从脚本里运行scrapy的方法

    这篇文章主要介绍了Python实现从脚本里运行scrapy的方法,实例分析了Python脚本运行的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • Python实现批量绘制遥感影像数据的直方图

    Python实现批量绘制遥感影像数据的直方图

    这篇文章主要为大家详细介绍了如何基于Python中gdal模块,实现对大量栅格图像批量绘制直方图,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02

最新评论