使用现代加密技术验证和加密的api令牌

pybranca的Python项目详细描述


python的branca令牌

使用现代密码验证和加密的api令牌。

Latest VersionSoftware LicenseBuild StatusCoverage

什么?

Branca是一种安全易用的令牌格式,这使得很难向自己的脚开枪。它使用ietf xchacha20-poly1305 aead对称加密创建加密和防篡改令牌。有效负载本身是任意字节序列。例如,可以使用json对象、纯文本字符串甚至由MessagePackProtocol Buffers序列化的二进制数据。

虽然不是设计目标,但是可以使用Branca as an alternative to JWT

安装

使用pip安装库。注意,还必须安装libsodium

$ brew install libsodium
$ pip install pybranca

用法

令牌的有效负载可以是任何东西,比如简单的字符串。

frombrancaimportBrancabranca=Branca(key="supersecretkeyyoushouldnotcommit")token=branca.encode("Hello world!")payload=branca.decode(token)print(token)print(payload)# 87xqn4ACMhqDZvoNuO0pXykuDlCwRz4Vg7LS3klfHpTiOUw1ramOqfWoaA6bvsGwOQ49MDFOERU0T# b'Hello world!'

对于更复杂的数据结构,json是常见的选择。

importjsonfrombrancaimportBrancabranca=Branca(key="supersecretkeyyoushouldnotcommit")string=json.dumps({"scope":["read","write","delete"]})token=branca.encode(string)payload=branca.decode(token)print(token)print(payload)print(json.loads(payload))# 6AlLJaBIFpXbwKTFsI3xXsk4se8YsdEKOtxYwtYDQHpoqabwZzmxAUS99BLxBJpmfJqnJ9VvzJYO1FXfsX78d0YsvTe43opYbUPgUao0EGV5qBli# b'{"scope": ["read", "write", "delete"]}'# {'scope': ['read', 'write', 'delete']}

通过使用MessagePack,您可以拥有更多的紧凑令牌。

importmsgpackfrombrancaimportBrancabranca=Branca(key="supersecretkeyyoushouldnotcommit")packed=msgpack.dumps({"scope":["read","write","delete"]})token=branca.encode(packed)payload=branca.decode(token)print(token)print(payload)print(msgpack.loads(payload,raw=False))# 3iJOQqw5CWjCRRDnsd7Jh4dfsyf7a4qbuEO0uT8MBEvnMVaR8rOW4dFKBVFKKgxZkVlNchGJSIgPdHtHIM4rF4mZYsriTE37# b'\x81\xa5scope\x93\xa4read\xa5write\xa6delete'# {'scope': ['read', 'write', 'delete']}

许可证

麻省理工学院的执照。有关详细信息,请参见License File

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
线程“main”java中的socket异常。网SocketException:在java上重置连接。木卫一。缓冲读取器。读线(未知源)   java原子参考   如何使用Java以编程方式确定两个XML文件(如XPATH)之间的差异?   java使用ApachePOI从存在于不同行中的两列中提取公共值   java在JavaFX中使用WebView会破坏Linux上的UI   Java中for循环中的If语句   Java中Hilberts空间填充曲线算法   由于出现错误,使用Reformation2下载的java文件停止工作   java是否可以通过编程方式控制setjaxbvalidationeventhandler?   没有Eclipse GUI的java Eclipse RCP应用程序   多线程在Java中使用线程安全集合时,处理并发问题的最佳方法是什么?   swing Java LWJGL和JOptionPane   java JPA:设置@JoinColumn(updateable=false)以避免OptimisticLockException   java GL VertexBuffer无效操作   java在Swing中实现后退/前进按钮   java在同一个JTable上创建两个表   类文件中的java不兼容魔术值1008813135   在Java中使用“@”的c#文字字符串?