跳转到主要内容

Python 中的 JSON Web 签名实现

项目描述

python-jws
=====
[JSON Web 签名草稿 02](http://self-issued.info/docs/draft-jones-json-web-signature.html) 的 Python 实现

现在也适用于 Python 3.3+ 以及 Python 2.7+。然而,这是一个简单的转换以支持 Python 2 和 Python 3,因此可能存在隐藏的错误。

安装
----------
$ pip install jws



算法
----------
JWS 规范为加密签名预留了几个算法。在 9 个算法中,此库目前支持 7 个


**HMAC** – 本地

* HS256 – 使用 SHA-256 哈希算法的 HMAC
* HS384 – 使用 SHA-384 哈希算法的 HMAC
* HS512 – 使用 SHA-512 哈希算法的 HMAC


**RSA** – 需要 pycrypto >= 2.5:``pip install pycrypto``

* RS256 – 使用 SHA-256 哈希算法的 RSA

**ECDSA** – 需要 ecdsa 库:``pip install ecdsa``

* ES256 – 使用 P-256 曲线和 SHA-256 哈希算法的 ECDSA
* ES384 – 使用 P-384 曲线和 SHA-384 哈希算法的 ECDSA
ES512 – 使用P-521曲线和SHA-512散列算法的ECDSA

此外,还有一个机制,通过添加自己的算法来扩展功能,而无需打开整个代码库。
请参阅高级用法部分以获取示例。
示例。

对于RSA和ECDSA,所有加密库都是按需加载的,所以除非您尝试使用功能,否则不需要依赖项。

用法
-----
让我们看看一些示例。

>>> 导入 jws
>>> header = { 'alg': 'HS256' }
>>> payload = { 'claim': 'JSON是最酷的。', 'iss': 'brianb' }
>>> signature = jws.sign(header, payload, 'secret')
>>> jws.verify(header, payload, signature, 'secret')
True
>>> jws.verify(header, payload, signature, 'badbadbad')
Traceback (most recent call last)
...
jws.exceptions.SignatureError: 无法验证签名

现在使用一个真正的密钥!

>>> 导入 ecdsa
>>> sk256 = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p)
>>> vk = sk256.get_verifying_key()
>>> header = { 'alg': 'ES256' }
>>> sig = jws.sign(header, payload, sk256)
>>> jws.verify(header, payload, sig, vk)
True

高级用法
--------------
制作此文件

# 文件:sillycrypto.py
import jws
from jws.algos import AlgorithmBase, SignatureError
class FXUY(AlgorithmBase)
def __init__(self, x, y)
self.x = int(x)
self.y = int(y)
def sign(self, msg, key)
return 'verysecure' * self.x + key * self.y

def verify(self, msg, sig, key)
if sig != self.sign(msg, key)
raise SignatureError('nope')
return True

jws.algos.CUSTOM += [
# 一个包含两个命名匹配组的正则表达式。(x和y)
# 命名组将被发送到类构造函数
(r'^F(?P\d)U(?P\d{2})$', FXUY),
]

在解释器中

>>> 导入 jws
>>> header = { 'alg': 'F7U12' }
>>> payload = { 'claim': 'wutt' }
>>> sig = jws.sign(header, payload, '<trollface>')
Traceback (most recent call last)
....
jws.exceptions.AlgorithmNotImplemented: "F7U12" 未实现。
>>>
>>> 导入 sillycrypto
>>> sig = jws.sign(header, payload, '<trollface>')
>>> jws.verify(header, payload, sig, '<trollface>')
True
>>> jws.verify(header, payload, sig, 'y u no verify?')
Traceback (most recent call last)
....
jws.exceptions.SignatureError: nope


其他内容
---------

查看
https://github.com/brianloveswords/python-jws/blob/master/examples/minijwt.py
以查看JWT的14行实现。

查看
https://github.com/brianloveswords/python-jws/blob/master/examples/ragecrypto.py
以查看受愤怒漫画启发的加密扩展。

TODO
-------
* 写关于在头部周围可以做什么的所有酷炫内容(与加密算法一样可扩展)
* 引入JWK支持


测试
-----

使用nosetests

许可证
-------

MIT

项目详情


下载文件

为您的平台下载文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源代码分布

jws-0.1.3.tar.gz (8.1 kB 查看哈希值)

上传时间 源代码

构建分布

jws-0.1.3-py3.4.egg (20.6 kB 查看哈希值)

上传于

jws-0.1.3-py2.7.egg (19.9 kB 查看哈希值)

上传于

jws-0.1.3-py2.6.egg (19.9 kB 查看哈希值)

上传于

由以下组织支持