实现安全远程密码(SRP)身份验证的工具

srptools的Python项目详细描述


https://github.com/idlesign/srptools

LBC Python 2

releasestatsliccicoveragehealth

说明

用于实现安全远程密码(srp)身份验证的工具

srp是一种基于密码的安全认证和密钥交换协议- 一种密码认证密钥协议(pake)。

此包包含Python2和3的协议实现。

您可以将其导入到应用程序中并使用其api,也可以使用 srptools命令行实用程序(cli):

cli用法

命令行实用程序要求安装click包。

基本方案:

> srptools get_user_data_triplet
> srptools server get_private_and_public
> srptools client get_private_and_public
> srptools client get_session_data
> srptools server get_session_data

提供帮助:

> srptools --help

API使用

初步步骤。就沟通细节达成一致:

fromsrptoolsimportSRPContextcontext=SRPContext('alice','password123')username,password_verifier,salt=context.get_user_data_triplet()prime=context.primegen=context.generator

简化的工作流程:

fromsrptoolsimportSRPContext,SRPServerSession,SRPClientSession# Receive username from client and generate server public.server_session=SRPServerSession(SRPContext(username,prime=prime,generator=gen),password_verifier)server_public=server_session.public# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt)# Generate client public and session key.client_public=client_session.public# Process client public and compare session keys.server_session.process(client_public,salt)assertserver_session.key==client_session.key

扩展工作流

fromsrptoolsimportSRPContext,SRPServerSession,SRPClientSession# Receive username from client and generate server public.server_session=SRPServerSession(SRPContext(username,prime=prime,generator=gen),password_verifier)server_public=server_session.public# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt)# Generate client public and session key proof.client_public=client_session.publicclient_session_key_proof=client_session.key_proof# Process client public and verify session key proof.server_session.process(client_public,salt)assertserver_session.verify_proof(client_session_key_proof)# Generate session key proof hash.server_session_key_proof_hash=client_session.key_proof_hash# Verify session key proof hash received from server.assertclient_session.verify_proof(server_session_key_proof_hash)

使用提示

  • srptools.constants包含基本常数,可以与SRPContext一起使用,以便服务器和客户端同意 关于沟通细节。

  • ^会话类的{tt5}$方法在某些情况下可能会引发SRPException。验证进程 这种情况必须停止。

  • .private会话类属性可用于还原会话:
    server_private=server_session.private# Restore session on new request.server_session=SRPServerSession(context,password_verifier,private=server_private)
  • ^ tt4}$相当灵活,因此您可以通过它的帮助实现一些自定义服务器/客户端会话逻辑。

  • 基本值表示为十六进制字符串,但也支持Base64编码的值:

    server_public=server_session.public_b64# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt,base64=True)# Use srptools.hex_from_b64() to represent base64 value as hex.server_public_hex=hex_from_b64(server_public)

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

推荐PyPI第三方库


热门话题
java如何从room数据库读取所有值并显示到recyclerview中?   java如何在不使用索引器(lucene)和google自定义搜索的情况下创建自定义搜索框   java我需要帮忙整理扑克牌   java无法从手机内部存储器的数据文件夹或文档文件夹中读取文本文件   安卓如何用java代码编写此xml   使用service builder类更新java blob数据失败   java无法检测adb版本,退出值:0xc0000135   java变量不保存当前列表大小   WAMPSERVER中用户“root”@“localhost”(使用密码:YES)的java访问被拒绝   java Springboot Jsp不适用于2.0.2版。释放   io如何强制java OutputStreamWriter实际写入单个字节?   大型文本文件中的java字符串匹配问题   java Guice注入空检查?   java Flink WordCount,什么时候是求和计算,源代码在哪里?   java矩阵中的最小拆分数   java如何在其适配器函数中重新绘制可扩展列表?   java如何将EAR远程部署到JBoss 5.1.0。GA使用Cargo maven插件?