想给数据加个密?打造一个安全的接口?python-jose 这个库简直就是你的贴心小棉袋!说起来它在加密解密这块玩得可溜了,支持 JWT(JSON Web Tokens)、JWS(JSON Web Signatures)和 JWE(JSON Web Encryption)这些高大上的加密标准,用起来贼方便。
1.
安装这玩意儿
装这个库超简单,一行命令搞定:
pip install python-jose
不过要是想用 RSA 加密,还得多装个包:
pip install python-jose[cryptography]
2.
JWT 整起来!
JWT 就像是给数据打包加了个电子锁,看着像一串乱码,其实里边儿藏着咱们的数据呢:
from jose import jwt
# 随便整个密钥
secret_key = “我是一个没人猜得到的密钥”
# 要加密的数据
data = {
“user_id”: 123,
“role”: “admin”,
“exp”: 1635000000 # 这是过期时间
}
# 加密!
token = jwt.encode(data, secret_key, algorithm=“HS256”)
print(f“加密后的token:{token}”)
# 解密看看
decoded = jwt.decode(token, secret_key, algorithms=[“HS256”])
print(f“解密后的数据:{decoded}”)
温馨提示:千万别把那个 secret_key 写死在代码里,最好放在环境变量或配置文件中!
3.
JWS 也来玩玩
JWS 就是给数据打个数字签名,确保数据没被人篡改:
from jose import jws
# 签名
signed = jws.sign({“msg”: “这是原始数据”}, “密钥”, algorithm=“HS256”)
print(f“签名后的数据:{signed}”)
# 验证签名
verified = jws.verify(signed, “密钥”, algorithms=[“HS256”])
print(f“验证后的数据:{verified}”)
4.
RSA 加密解密
RSA 是非对称加密,跟咱们平常用的对称加密不太一样。它有两把钥匙,一个公钥一个私钥:
from jose import jwt
# 生成密钥对
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
# 把私钥转成PEM格式
pem_private = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
# 把公钥也转成PEM格式
pem_public = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
# 用RSA加密JWT
token = jwt.encode(
{“data”: “机密内容”},
pem_private,
algorithm=“RS256”
)
# 用公钥解密
data = jwt.decode(
token,
pem_public,
)
温馨提示:用 RSA 的时候记得保管好私钥,丢了就凉凉了!
5.
常见坑点
咱写代码难免会遇到一些坑,提前知道总没坏处:
记得处理异常,别让程序崩了:
from jose.exceptions import JWTError
try:
except JWTError:
print(“解密失败啦,token可能有问题”)
token 过期时间别设太长,容易出安全问题
密钥要够复杂,别整个 “123456” 就完事了
python-jose 这个库其实挺好用的,加密解密不费劲,安全性也有保证。要是你要做 API 认证啥的,它绝对能帮上忙。平时写代码记得把安全性放在第一位,毕竟谁也不想自己的数据被人偷走对吧!
代码写多了就发现,这些加密解密的活儿都是套路,掌握了这些基础的用法,以后再遇到类似需求分分钟就能搞定。要是觉得这些代码不够过瘾,建议去翻翻官方文档,里边儿还有更多高级玩法等着你去探索呢!
领取专属 10元无门槛券
私享最新 技术干货