[英]Working with the Python Cryptographic Library
我正在嘗試將JWT_PUBLIC
和JWT_PRIVATE
密鑰功能添加到djangorestframework-jwt
。 這是文檔中的部分,詳細介紹了如何使用它:
首先,我有以下內容:
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey, RSAPrivateKey
JWT_SECRET_KEY = 'supercrazysecretjwtstringwowamazing'
JWT_PUBLIC_KEY = RSAPublicKey().encrypt(JWT_SECRET_KEY)
JWT_PRIVAT_KEY = RSAPrivateKey().encrypt(JWT_SECRET_KEY)
但是,我收到以下錯誤:
TypeError: Can't instantiate abstract class RSAPublicKey with abstract methods encrypt, key_size, public_bytes, public_numbers, verifier, verify
瀏覽了文檔后,我對具體要求我做什么/改變一無所知。
所以,我的問題是/是:
1.) 我們如何使用這個 package 的JWT_PUBLIC_KEY
和JWT_PRIVATE_KEY
功能?
2.) “ Can't instantiate abstract class X with abstract methods ”在 Python 上下文中的實際含義是什么?
非對稱加密(即擁有公鑰和私鑰)不同於對稱加密(即只有一個密鑰)。 您不能(通常)從密碼中派生非對稱(公鑰/私鑰)密鑰對,您必須使用 openssl 之類的內容生成它們
這些文檔看起來也不正確,代碼只是將私鑰和公鑰傳遞給 PyJWT ,而 PyJWT 又需要字符串
解決您的問題:
JWT_ALGORITHM = 'RS256'
JWT_PUBLIC_KEY = open('public.pem').read()
JWT_PRIVATE_KEY = open('private.pem').read()
一切都會有希望的!
看起來我誤讀了代碼,您可以使用以下內容加載鍵:
def load_rsa_private_key(path):
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
with open(path, 'rb') as priv:
private_key = serialization.load_pem_private_key(
priv.read(), password=None, backend=default_backend())
return private_key
JWT_PRIVATE_KEY = load_rsa_private_key('keypair.pem')
JWT_PUBLIC_KEY = JWT_PRIVATE_KEY.public_key()
我在 function 中這樣做,這樣它就不會過多地污染您的配置命名空間
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.