设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 47|回复: 0

[开源] KaleidoTalk:从零实现Ed25519+X25519+AES-GCM的端到端加密谈天软件

[复制链接]
累计签到:7 天
连续签到:2 天
灌水成绩
11
7
1172
主题
帖子
积分

等级头衔

ID : 686

测量学徒

积分成就 测量币 : 1172
在线时间 : 0 小时
注册时间 : 2026-4-6
最后登录 : 2026-5-9

勋章
UID勋章测量学徒测量员
联系方式
发表于 昨天 19:25 来自手机 | 显示全部楼层 |阅读模式 IP:香港
近来闲来无事,写了一个端到端加密的聊天系统,发出来给大家分享一下。
项目名叫 KaleidoTalk,基于 Ed25519身份密钥 + X25519密钥交换 + AES-256-GCM对称加密,服务器只转发密文,无法解密消息。

能实现什么功能?
1. 端到端加密:用的是 Ed25519 + X25519 + AES-256-GCM,不是传输层加密,是消息本身加密。
2. 私钥存哪自选:你可以把加密后的私钥放服务器上(换装备也能登录),也可以只存本地(更安心)。
3. 信任验证:首次聊天的两个人需要互相核对“指纹”(一串单词),确认一致才能正常收发消息。防中间人攻击。
4. 离线消息:对方不在线的话,消息会暂存,上线后自动推送。
5. 服务器管理:管理员可以封IP、封用户、开邀请码注册。
6. 图形界面:用 CustomTkinter 写的,看着还算现代,支持托盘、消息闪烁。
7. 技术栈:Python 3.10,加密部分全用的 cryptography 库,网络层自己封装了一个简单的 JSON + 长度头协议。

项目截图



核心代码
[Python] 纯文本查看 复制代码@staticmethoddef encrypt(plaintext: str, recipient_x25519_pub, sender_identity_priv):    # 生成暂时 X25519 密钥对    eph_priv = x25519.X25519PrivateKey.generate()    eph_pub = eph_priv.public_key()        # ECDH + HKDF 派生 AES 密钥    shared_secret = eph_priv.exchange(recipient_x25519_pub)    hkdf = HKDF(algorithm=hashes.SHA256(), length=32, salt=None, info=b'kaleido-msg')    aes_key = hkdf.derive(shared_secret)        # AES-256-GCM 加密    nonce = os.urandom(12)    cipher = Cipher(algorithms.AES(aes_key), modes.GCM(nonce))    encryptor = cipher.encryptor()    ciphertext = encryptor.update(plaintext.encode()) + encryptor.finalize()    tag = encryptor.tag        # Ed25519 签名(对 暂时公钥+密文+tag 签名)    signed_data = eph_pub.public_bytes_raw() + ciphertext + tag    signature = sender_identity_priv.sign(signed_data)        # 打包成 base64 JSON    return json.dumps({        'eph_pub': b64encode(eph_pub.public_bytes_raw()).decode(),        'ct': b64encode(ciphertext).decode(),        'tag': b64encode(tag).decode(),        'nonce': b64encode(nonce).decode(),        'sig': b64encode(signature).decode(),    })

整个代码结构分成了:
crypto_utils.py:所有加密相干(密钥生成、加解密、指纹单词)
network.py:消息的收发(带seq和时间戳,防重放)
client.py:GUI + 客户端逻辑(信任库、消息缓存、指纹对话框)
server.py:多线程服务端(会话管理、离线消息、防爆破)
admin.py:本地管理脚本(邀请码、封禁)

怎么跑起来?
1. 安装依赖:pip install cryptography pystray Pillow customtkinter
2. 启动服务端:python server.py(首次运行会要求设置管理员暗码)
3. 启动客户端:python client.py
4. 毗连地点 127.0.0.1:5555,注册账号后登录即可。
更具体的摆设阐明、命令参数以及完整源码,请访问我的 GitHub 仓库(见下方)。

项目地点
github.com/hbzsoft/KaleidoTalk
如果您以为不错,接待给个star支持一下~
友情提示:本工具仅供学习交流使用。用户需服从当地法律法规,作者不对任何违法使用行为负担责任。
精密测量技术论坛免责声明
重要声明:以上内容仅代表该作者观点,不代表本站精密测量技术论坛立场。
如有涉及侵权请尽快告知,我们将会在第一时间处理。作者原创内容未经允许不得转载!
站长联系邮箱:1339305021@qq.com
站长联系微信:dddnnbbb
快速回复换一批
遇见神贴岂能不顶
顶顶顶
路过留名
强无敌
楼主好人一生平安
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|精密测量技术论坛 ( 桂ICP备2026007449号-1 )|网站地图

GMT+8, 2026-5-10 04:25 , Processed in 0.124392 second(s), 36 queries .

快速回复 返回顶部 返回列表