首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中创建JWKS公钥/私钥对?

如何在python中创建JWKS公钥/私钥对?
EN

Stack Overflow用户
提问于 2021-05-18 15:35:26
回答 2查看 4.4K关注 0票数 4

如何创建JWKS公钥/私钥对,类似于可以在https://mkjwk.org/手工创建的密钥对,其中包括Key ID (kid)和Key Use (use)?我使用cryptography模块生成RSA密钥对,使用python-jose提取密钥作为JWK,但是创建的密钥不包括kiduse (这并不奇怪,因为它们没有在任何地方指定)。

代码:

代码语言:javascript
复制
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
​
from jose import jwk, constants
import json
​
key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
public_key = key.public_key().public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
)
private_key = key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption()
)
​
print(json.dumps(jwk.RSAKey(algorithm=constants.Algorithms.RS256, key=public_key.decode('utf-8')).to_dict()))
print(json.dumps(jwk.RSAKey(algorithm=constants.Algorithms.RS256, key=private_key.decode('utf-8')).to_dict()))

由上述代码段生成的公钥(没有kiduse属性):

代码语言:javascript
复制
{
    "alg": "RS256",
    "kty": "RSA",
    "n": "tqbcR_6JC....OKQ",
    "e": "AQAB"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-18 15:50:34

我相信kid只是一个元数据(任何字符串),在生成密钥的过程中没有使用它。

use的情况下,这可能有点类似,但取决于您对非对称加密的不同使用方式(您可以参考最著名的非对称加密系统RSA

总之,您很可能根据上面的信息重新创建JSON的确切结构,向JSON添加适当的键。

票数 1
EN

Stack Overflow用户

发布于 2021-05-19 16:58:23

另一种使用jwcrypto库生成JWKS公钥/私钥对的方法:

代码语言:javascript
复制
from jwcrypto import jwk

key = jwk.JWK.generate(kty='RSA', size=2048, alg='RSA-OAEP-256', use='enc', kid='12345')
public_key = key.export_public()
private_key = key.export_private()

由上述代码段生成的公钥:

代码语言:javascript
复制
{
    "kty": "RSA",
    "alg": "RSA-OAEP-256",
    "kid": "12345",
    "use": "enc",
    "e": "AQAB",
    "n": "0YclBn...vV7y7w"
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67589495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档