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
=====
[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
]
在解释器中
>>> 导入 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 查看哈希值)
关闭
jws-0.1.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e3d4cb06ae7c5c1d16d357b4e7acb5c5ecab0cccb3a4b998035b85052488053 |
|
MD5 | 2d1dbd8dde4d2965b425add86963fa6e |
|
BLAKE2b-256 | 019e1536d578ed50f5fe8196310ddcc921a3cd8e973312d60ac74488b805d395 |
关闭
jws-0.1.3-py3.4.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c435117e2f6842e74e9a167df58cbab20f36aa14996ccbc81b7aded2f09a704 |
|
MD5 | 276cd194ed5164f3a97d286fca4ca0bc |
|
BLAKE2b-256 | c97fd9ab4b0c6fbd9b3420b332bbdd707ed7823a47bd5b717dd4c5ab7ab91837 |
关闭
jws-0.1.3-py2.7.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6f48d610bbd0d6974ce0c010a6ce0438d3fa87539e68c5e21ea28d29a8df0e57 |
|
MD5 | 4e3afb1e9a47b44217f3803c0bae702f |
|
BLAKE2b-256 | dd67dfa27efe338d526ca2a7b3633fada977959091808e9f22b7df08388a9d81 |
关闭
jws-0.1.3-py2.6.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8f9c25d7022a9592fe4766612db729e7f5ee2afbc8d409108ef11f26b0aa94b6 |
|
MD5 | 30aa0844df8d4c2d479266d5f0b4e2b6 |
|
BLAKE2b-256 | 357d7da8847ad5b7ec79528abd72dce38bd98c01070ca4a42cd120b5a933aff6 |