找不到解密python中的JWE令牌的方法(但在ASP.Net)使用jwcryp

2024-05-15 14:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用python对JWE令牌进行加密后,我很难在python中解密它ASP.Net. 在

这是我的密码(假密码):

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("ae743683f78d498a9026d0c87020b9d3"));
var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MbPeShVmYq3t6w9z"));

var signingCreds = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
var encryptingCreds = new EncryptingCredentials(secret, SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);
var handler = new JwtSecurityTokenHandler();

var jwtSecurityToken = handler.CreateJwtSecurityToken(
    _issuer,
    _audience,
    new ClaimsIdentity(claimsList),
    DateTime.Now,
    _expires,
    DateTime.Now,
    signingCreds,
    encryptingCreds);

var token = handler.WriteToken(jwtSecurityToken);

使用加密凭证时,令牌如下所示(是否typ不是JWE?)公司名称:

^{pr2}$

这是加密时的令牌:

eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwidHlwIjoiSldUIn0.4w4MZv5WFALGbXhmaYqtTv1VGrUpQpDJ0jN8VmLpQwDRU0j16RbPyg.hGt_z5j8THCiNEhpVvlJmw.WehLBKdyB_eYtDRvHxJHgYwa4GA7f8oKYf3GgIqAAih1eVqU084kHu1lIhC8ibxxziwmFZ4IhBFT-nWgWQrH9thhgqndF4ojtGRBgdHtW3GDAgYV6fgI11h6meyBBuLBs7mkQC5PX8EYsMTDiNE9iNTH4pWtDElc07CGGXlHsm6ntuq7G3sinagZtZMchy1shTY73NTS40FqW37C9HTIPDbrTdsm-USHcGaBMLSmjF5eOZ9Po3p4fhRT42l_gwJc9tlurttYBucvIiO1r_3NB8xGeORizYW1P_P9XGusAFy4L8h8XU9P0FctsMjUFy64LOIK8Qv8YZVq4q82vv-r9uGH6bApUdpCIcYFfGu86w63t1QLQcDT_OYMCqwo9ZmZP5Gd07lB1ypNZbP6hQTgkosp3js3i4K4bFQY7CiSXB_pSTH623TMLHNfUXWMRMIBHmXGr-zTZiKj5vkVUZLjNg.sdBUYvadnwMhkCXP8sABgA

我尝试过几个不同的python包,包括jose的2个版本(python-jose和{}),但无法让jose使用加密(似乎不支持128kw算法)。在

我现在正在尝试jwcrypto,但似乎希望我生成一个新的密钥,而不是使用现有的密钥(用于在中加密JWT的密钥)ASP.Net)公司名称:

from jwcrypto import jwk, jwe

encrypted_token = request.cookies.get(cookie_name)  
private_key = "MbPeShVmYq3t6w9z"

jwk_key = jwk.JWK()

# not sure how to use my existing "private_key" value, 
# and no support for "A128KW" with jwcrypto despite 
# the documentation saying there is support
key = jwk_key.import_key(alg='A128KW', kty="A256CBC-HS512")

jwe_token = jwe.JWE()
jwe_token.deserialize(encrypted_token)
jwe_token.decrypt(key) # decrypt requires an instance of JWK
decrypted_payload = jwe_token.payload

我怎样才能让它工作?谢谢你的建议。在


Tags: keytoken密码newnetvar密钥handler
1条回答
网友
1楼 · 发布于 2024-05-15 14:20:34

看起来python-jose不支持JWE。在他们的online documentation或{a2}中,我找不到任何与JWE解析或加密/解密相关的代码行。在

希望在图书馆名单上智威汤逊,我发现jwcrypto应该支持这种加密令牌(请参见this example dealing with A256KW),在srouce代码中我们可以看到A128KW is listed。在

你可以试试看。在

from jwcrypto import jwk, jwe

encrypted_token = request.cookies.get(cookie_name)  

key = jwk.JWK.from_json('{"kty":"oct","k":"TWJQZVNoVm1ZcTN0Nnc5eg"}')

jwe_token = jwe.JWE()
jwe_token.deserialize(encrypted_token)
jwe_token.decrypt(key)
decrypted_payload = jwe_token.payload

相关问题 更多 >