python - jwt.exceptions.DecodeError:无效的加密填充
问题描述
我正在尝试解码一个简单的 jwt 这个
eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLm1kbC5lbnRlcmN5IiwiZXhwIjoxNjI3MzgyMTI3LCJpYXQiOjE2MjcyOTU3MjcsInN1YiI6IjAwMTUxMC5hNjQ0MzcyOWE3OTU0ZmQyYTE2NjcyN2NjODY0ZDUyZi4wODI4IiwiY19oYXNoIjoiVl9yUG1Db1Vab0lmejlJQW9WcEFNZyIsImVtYWlsIjoiZnJlZGVyaWNrLm1kbEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJhdXRoX3RpbWUiOjE2MjcyOTU3MjcsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.DDc3G6jJbsLXYX_F3GQ851mEukVDAMvySDPWwWfsmQOmi8w_ItCUaMwSMp0djzzFy3dLpF2cMp67n
我设法在以下链接中成功解码它,您可以在这里查看它https://jwt.io/
但是当我尝试使用 python 时我没有成功。这是我的代码
import jwt
def main(args):
encoded_jwt = "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLm1kbC5lbnRlcmN5IiwiZXhwIjoxNjI3MzgyMTI3LCJpYXQiOjE2MjcyOTU3MjcsInN1YiI6IjAwMTUxMC5hNjQ0MzcyOWE3OTU0ZmQyYTE2NjcyN2NjODY0ZDUyZi4wODI4IiwiY19oYXNoIjoiVl9yUG1Db1Vab0lmejlJQW9WcEFNZyIsImVtYWlsIjoiZnJlZGVyaWNrLm1kbEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6InRydWUiLCJhdXRoX3RpbWUiOjE2MjcyOTU3MjcsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.DDc3G6jJbsLXYX_F3GQ851mEukVDAMvySDPWwWfsmQOmi8w_ItCUaMwSMp0djzzFy3dLpF2cMp67n"
val=jwt.decode(encoded_jwt, options={"verify_signature": False})
print(val)
return;
if __name__ == '__main__':
main(0)
这是我得到的错误
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\api_jws.py", line 211, in _load
signature = base64url_decode(crypto_segment)
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\utils.py", line 33, in base64url_decode
return base64.urlsafe_b64decode(input)
File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\base64.py", line 133, in urlsafe_b64decode
return b64decode(s)
File "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\base64.py", line 87, in b64decode
return binascii.a2b_base64(s)
binascii.Error: Invalid base64-encoded string: number of data characters (77) cannot be 1 more than a multiple of 4
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\jwt\jwts.py", line 13, in <module>
main(3)
File "C:\Users\User\PycharmProjects\jwt\jwts.py", line 8, in main
val=jwt.decode(encoded_jwt, options={"verify_signature": False})
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\api_jwt.py", line 119, in decode
decoded = self.decode_complete(jwt, key, algorithms, options, **kwargs)
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\api_jwt.py", line 90, in decode_complete
decoded = api_jws.decode_complete(
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\api_jws.py", line 146, in decode_complete
payload, signing_input, header, signature = self._load(jwt)
File "C:\Users\User\PycharmProjects\jwt\venv\lib\site-packages\jwt\api_jws.py", line 213, in _load
raise DecodeError("Invalid crypto padding") from err
jwt.exceptions.DecodeError: Invalid crypto padding
解决方案
当您第一次对解码的令牌https://jwt.io/网站进行编码时,您的令牌以 (" ") this 开头,您会看到两个警告,因为 ("") this。在此之后,不使用(“”)则警告不再显示。
推荐阅读
- ios - iOS auto-renewable subscriptions and restoreCompletedTransactions(): is the transaction removed from the queue after expiration or cancellation?
- java - Java 9 JDBC setup
- c# - Xamarin firebase 消息在应用程序处于关闭状态时运行意图
- javascript - 由于服务器和外壳不匹配,无法将 mongoDB 数据库连接到 Atlas
- c# - 转换udp流数据和同时写入rTextBox的高效方法
- python - 根据手册,numpy.squeeze() 返回 ndarray,但在某些情况下,它没有,为什么?
- ajax - SAP Fiori Launchpad Timeout Shell Plugin 应用程序 - 已被 CORS 策略阻止
- javascript - 如何通过 jQuery 创建文件+文件夹树视图
- python - create nested json file managing null values
- python - Code of a generator that does not work properly in Python