在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. 注意事项(超级重要!)
- 不要自己发明加密算法!用现成的库(如
cryptography
),自己写的很容易被破解。 - 密钥(密码)要保管好!如果别人拿到你的密钥,就能解密你的数据。
- 不要用 md5/sha-1!它们已经不安全了,推荐用
sha-256
或bcrypt
。 - 加密不是万能的!如果电脑有病毒,加密也可能被破解。
5. 总结
- 加密 = 把数据变成乱码,只有有钥匙的人能还原。
- 哈希 = 计算数据的“指纹”,用来验证是否被修改。
- python 的
crypto
包(如cryptography
、pycryptodome
、hashlib
)就是干这些事的! - 存储密码用
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文件传输
注意事项
- 安全性:避免使用已弃用的库(如
pycrypto
),优先选择cryptography
或pycryptodome
。 - 哈希算法:md5和sha-1已不安全,推荐sha-256或bcrypt。
- 密钥管理:密钥应通过安全方式(如环境变量)存储,而非硬编码。
总结
- 通用加密:
cryptography
或pycryptodome
。 - 密码哈希:
bcrypt
或argon2
。 - 简单哈希:
hashlib
。 - 网络加密:
ssl
或paramiko
。
根据需求选择合适的工具,并始终遵循最佳安全实践!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论