累计签到:7 天 连续签到:2 天
|
近来闲来无事,写了一个端到端加密的聊天系统,发出来给大家分享一下。
项目名叫 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
|