JWT 的加解密, ruby 与 python

猪小花1号2018-09-05 11:33

作者:刘朝敏


背景

现在,公司内部跨部门的合作很常见,数据接口的调用也就很频繁。本文使用比较新的 JWT 实现,采用 HS256 的算法来加/解密,达到内部的隐藏数据对接。

ruby

安装 gem 包, https://github.com/jwt/ruby-jwt

gem install jwt

命令行测试 irb:

> require 'jwt'

# Expiration Time Claim

# 不超过 60s
> secret = "IamAsecret" # 内部密码
> exp_payload = { :data => 'data', :exp => Time.now.to_i +60 }

# 生成token
> token = JWT.encode exp_payload, secret, 'HS256'

# 解码
> decoded_token = JWT.decode token, secret, true, { :algorithm => 'HS256' }

如果解码失败,可能会返回:
1. JWT::ExpiredSignature: Signature has expired 超过60s
2. JWT::VerificationError: Signature verification raised 验证不通过

python

安装包, https://github.com/jpadilla/pyjwt

pip install PyJWT

命令行测试 python:

> import jwt
> import time

> secret = "IamAsecret"
> exp_payload = {'data': 'data', 'exp': int(time.time()) + 60}

> token = jwt.encode(exp_payload, secret, algorithm='HS256')

> d = jwt.decode(token, secret, algorithms=['HS256'])

# 可能需要转码
> d['data'].encode('ascii')
# => 'data'

可能会有错误:

1. jwt.exceptions.ExpiredSignatureError: Signature has expired
2. jwt.exceptions.DecodeError: Signature verification failed


网易云大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者刘朝敏授权发布