簡體   English   中英

將 EdDSA 算法與 PyJWT 結合使用

[英]Using the EdDSA algorithm with PyJWT

我正在嘗試使用 EdDSA 算法進行編碼,但我不斷收到以下錯誤。

關於我做錯了什么的任何想法?

EllipticCurvePrivateKey = "-----BEGIN PRIVATE KEY-----\[HIDDEN]\n-----END PRIVATE KEY-----"

encoded = jwt.encode({"some": "payload"}, EllipticCurvePrivateKey, 'EdDSA')

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/rogermukai/Dev/Templates/jwt-example/.venv/lib/python3.10/site-packages/jwt/api_jwt.py", line 67, in encode
    return api_jws.encode(json_payload, key, algorithm, headers, json_encoder)
  File "/Users/rogermukai/Dev/Templates/jwt-example/.venv/lib/python3.10/site-packages/jwt/api_jws.py", line 153, in encode
    key = alg_obj.prepare_key(key)
  File "/Users/rogermukai/Dev/Templates/jwt-example/.venv/lib/python3.10/site-packages/jwt/algorithms.py", line 601, in prepare_key
    raise InvalidKeyError(
jwt.exceptions.InvalidKeyError: Expecting a EllipticCurvePrivateKey/EllipticCurvePublicKey. Wrong key provided for EdDSA algorithms

我希望能夠使用 EdDSA 算法,因為文檔指出這是可能的,但沒有給出示例。

這就是我的想法。 我按照從上到下的順序運行了以下步驟。

在終端/sehlll 中:

$ openssl genpkey -algorithm Ed25519 -out ed25519key.pem

$ cat ed25519key.pem
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIKRLPECftB6nJ/ZMQ/OXI1sdwDYUDP7gAq5sea0opeUT
-----END PRIVATE KEY-----

$ openssl pkey -in ed25519key.pem -pubout  
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA7Adh+4SttVNkOk1C/9XJj6uqtbgFZChpLuz+bq0cSF4=
-----END PUBLIC KEY-----

python

import jwt

key = """-----BEGIN PRIVATE KEY-----
... MC4CAQAwBQYDK2VwBCIEIKRLPECftB6nJ/ZMQ/OXI1sdwDYUDP7gAq5sea0opeUT
... -----END PRIVATE KEY-----"""

encoded = jwt.encode({"Some":"Key"}, key, algorithm='EdDSA')

print(encoded)
>>> eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJTb21lIjoiS2V5In0.HDsL-x5WdP2rqpL0rq_Ir2dj9c8IEl_qqcfpUEZjncqP8df8Nrz-FGEfnI2-eB7JOGGI2WzZHM_O8vu7ieokCg

public_key = """-----BEGIN PUBLIC KEY-----
... MCowBQYDK2VwAyEA7Adh+4SttVNkOk1C/9XJj6uqtbgFZChpLuz+bq0cSF4=
... -----END PUBLIC KEY-----"""

decoded = jwt.decode(encoded, public_key, algorithms='EdDSA', verify=True)
print(decoded)
>>> {'Some': 'Key'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM