【问题标题】:how to sign a token with RSA SHA-256, in python?如何在 python 中使用 RSA SHA-256 签署令牌?
【发布时间】:2017-12-31 02:06:53
【问题描述】:

我正在尝试使用 python 对 JWT 进行编码,我需要在 base64 中对其进行编码,我做到了。然后我必须在发送到服务器之前用私钥对其进行签名。其实我被屏蔽了,什么时候签不知道怎么签,从昨天开始就在网上搜索,有点迷茫。这是我的代码。

import jwt

print ("\nStart..")

encoded = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')

print("\nJWT : ",encoded)

try:
    decoded = jwt.decode(encoded, 'secret', algorithms=['HS256'])
except jwt.InvalidTokenError:
    print("Invalid token!!")

print("\ndecoded : ", decoded)

print("\nencodage : ")

#LOAD THE PRIVATE KEY


#SIGN THE ENCODED token

还有我的密钥格式,它是一个 RSA 私钥。

-----BEGIN RSA PRIVATE KEY-----
dsjkfhsdfkshkdfhks...
-----END RSA PRIVATE KEY-----

我给服务器crt.crt一个证书,我想我需要用我的私钥加密,然后他们就可以用证书中的密钥解密消息,这就是我所理解的。

提前致谢, G.B

【问题讨论】:

    标签: python jwt private-key sha256 rsa-sha256


    【解决方案1】:

    你可以试试参考:

    from Crypto.PublicKey import RSA
    from Crypto.Cipher import HS256
    
    def encrypt_text(input_text):
       utf8_text = input_text.encode('utf-8')
       pub_key = RSA.importKey(open(settings.RSA).read())
       cipher = HS256.new(public_key)
       cipher_text = base64.encodebytes(cipher.encrypt(utf8_text))
       return cipher_text.decode('utf-8')
    

    创建公钥和私钥:

    ssh-keygen -t rsa -C "your_email@example.com"
    

    希望有帮助

    【讨论】:

    • 你好 Viktor,谢谢你的回答,我已经有钥匙了,你为什么要使用 utf-8?我在 base64 中需要它
    • 属于你要加密的数据,我用这个来加密我的用户名和密码
    • @BELLOULGAYA 因为他将文本(字符串)编码为字节,因此是 UTF-8。有关 UTF-8 和 Base64 的用法,请参阅 this
    【解决方案2】:

    根据JWT RFC,RSA + SHA256 的算法类型是“RS256”,但您使用的是“HS256”

    【讨论】:

      【解决方案3】:

      看看:PyJWT

      PyJWT 是一个 Python 库,可让您对 JSON Web 令牌 (JWT) 进行编码和解码。 JWT 是一种开放的行业标准 (RFC 7519),用于在两方之间安全地表示声明

      它支持多种加密签名算法link

      您不需要对您的密钥/密钥进行编码

      您将有效负载作为 JSON 对象提供

      它使用适当的'.'语法

      【讨论】:

      • 在 StackOverflow 上并没有真正欣赏仅链接的答案。你能写一个简短的总结说明为什么你认为 PyJWT 可以解决这个问题吗?
      猜你喜欢
      • 2017-02-24
      • 1970-01-01
      • 2016-08-01
      • 2021-10-29
      • 1970-01-01
      • 2019-08-15
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多