当前位置: 首页 > backend >正文

安全语音通信系统python

安全语音通信系统

项目简介

安全语音通信系统是一个基于UDP协议的实时加密语音通信应用,采用客户端-服务器架构设计。系统支持用户注册、登录、加密语音通话,以及通话录制等功能。通过采用先进的AES加密技术(基于Fernet实现),确保通信内容的安全性和私密性,可用于需要保密的语音通信场景。

功能特点

核心功能

  • 用户管理:支持用户注册、登录和登出
  • 加密语音通话:实时、低延迟的语音通信,支持点对点加密
  • 安全性保障:采用Fernet加密(基于AES-128-CBC),每个用户拥有独立密钥
  • 密钥交换:基于服务器中转的安全密钥交换机制
  • 音频处理:采用DCT(离散余弦变换)进行音频压缩处理
  • 通话录制:支持录制原始音频、DCT变换后数据及加密数据

技术特点

  • NAT穿透:支持服务器中继模式,解决NAT网络环境下的连接问题
  • 音频优化:高频衰减、噪声阈值和动态范围压缩,提升音质
  • 设备兼容性:自动适配多种音频设备,支持不同通道配置
  • 网络诊断:内置网络连接测试和问题诊断功能
  • 心跳机制:保持连接活跃,及时检测断线情况

系统架构

系统由三部分组成:

  1. 客户端(improved_client.py)

    • 用户界面:基于Tkinter构建的图形用户界面
    • 音频处理:使用numpy和scipy进行音频采集、变换和播放
    • 加密模块:使用cryptography.fernet实现端到端加密
    • 通信模块:基于UDP协议的网络通信
  2. 服务器(improved_server.py)

    • 用户管理:用户注册、身份验证和状态维护
    • 会话管理:呼叫请求处理和通话会话维护
    • 密钥分发:安全地分发和交换用户密钥
    • 数据中继:可选的音频数据中继功能(解决NAT问题)
  3. 数据库

    • SQLite数据库(voice_users.db):存储用户账号、密码和加密密钥

数据流程

发送端流程

  1. 采集音频 →
  2. DCT变换(数据压缩)→
  3. 加密(可选)→
  4. 添加帧头(时间戳、序列号)→
  5. UDP发送

接收端流程

  1. 接收UDP数据包 →
  2. 解密(可选)→
  3. 解析帧头 →
  4. 逆DCT变换 →
  5. 音频输出

录音逻辑

  • 原始音频数据写入raw_recorder
  • DCT变换后的数据写入dct_recorder
  • 加密后的数据写入encrypted_recorder(若启用加密)
  • 接收到的DCT数据(解密后的)写入received_dct_recorder
  • 经过逆DCT变换后的原始音频写入received_raw_recorder

安装与配置

依赖库

tkinter
socket
threading
time
datetime
queue
wave
numpy
scipy
sounddevice
cryptography
base64
traceback
netifaces
sqlite3

安装步骤

Mac版本
  1. 安装Python 3.7或更高版本(如果尚未安装)

    brew install python3
    
  2. 安装依赖库

    pip3 install numpy scipy sounddevice cryptography netifaces
    
  3. 下载项目文件

    • improved_client.py:客户端程序
    • improved_server.py:服务器程序
Windows版本
  1. 安装Python 3.7或更高版本(从python.org下载)

  2. 安装依赖库

    pip install numpy scipy sounddevice cryptography netifaces
    
  3. 下载项目文件

    • improved_client.py:客户端程序
    • improved_server.py:服务器程序

使用方法

启动服务器

  1. 打开终端或命令提示符,切换到项目目录
  2. 运行服务器程序
    python improved_server.py
    
  3. 在服务器界面设置监听地址和端口(默认为0.0.0.0:9999)
  4. 点击"启动服务"按钮

客户端使用

  1. 运行客户端程序
    python improved_client.py
    
  2. 连接服务器
    • 输入服务器IP地址和端口
    • 注册新账号或使用现有账号登录
  3. 进行通话
    • 输入目标用户ID并点击"开始通话"
    • 等待对方接受通话请求
    • 通话过程中可选择启用加密和录音功能
    • 点击"结束通话"结束当前通话

音频设备配置

  • 在配置选项中选择合适的输入设备(麦克风)和输出设备(扬声器)
  • 系统会自动适配设备的通道数和采样率

安全机制

密钥管理

  1. 用户密钥生成:注册时为每个用户生成唯一的Fernet密钥
  2. 密钥保护:用户密钥使用预共享密钥(PRE_SHARED_KEY)加密后存储在数据库中
  3. 密钥交换:通话建立时,服务器负责安全地交换双方密钥

通话加密

  • 发送方使用自己的密钥加密音频数据
  • 接收方使用发送方的密钥解密接收到的数据
  • 全程端到端加密,即使数据经过服务器中继也无法被解密

高级功能

网络诊断

点击"网络诊断"按钮,系统会执行以下检查:

  • 检测可用网络接口
  • 测试与服务器的连接
  • 显示诊断结果

用户状态查询

  • 使用"检查状态"按钮可查询特定用户是否在线
  • 使用"获取在线用户"按钮获取当前所有在线用户列表

音频优化参数

可在代码中调整以下参数以优化音频质量:

  • blocksize:音频块大小,影响延迟
  • fs:采样率,默认44100Hz
  • high_freq_attenuation:高频衰减系数
  • noise_threshold:噪声阈值
  • dynamic_range:动态范围压缩系数

常见问题与解决方案

连接问题

  • 问题:无法连接到服务器
  • 解决方案
    • 检查服务器是否正常运行
    • 确认IP地址和端口是否正确
    • 检查网络连接和防火墙设置

音频问题

  • 问题:听不到对方声音或对方听不到自己
  • 解决方案
    • 检查音频设备选择是否正确
    • 确认麦克风和扬声器工作正常
    • 尝试重新建立通话连接

加密问题

  • 问题:启用加密后无法正常通话
  • 解决方案
    • 确保双方使用的预共享密钥相同
    • 检查密钥交换过程是否成功
    • 尝试重新登录并建立通话

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/8657.html

相关文章:

  • MSP430通用按键代码(KEY)设计与实现
  • 鸿蒙UI开发——Builder函数的封装
  • 【数据集】中国多属性建筑数据集CMAB
  • 互联网大厂Java求职面试实录 —— 严肃面试官遇到搞笑水货程序员
  • RAM(随机存取存储器)的通俗解释及其在路由器中的作用
  • 【Unity】使用InputSystem实现UI控件与键盘输入绑定以及如何快速制作虚拟摇杆
  • 前端错误监听与上报框架工作原理,如:Sentry
  • 全局异常处理器
  • 数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
  • 路径规划算法BFS/Astar/HybridAstar简单实现
  • C++ 内存管理与单例模式剖析
  • 单例模式总结
  • Redis 常用命令
  • 部署Gitlab-CE with Docker私有云环境
  • Windows系统定时备份/傲梅轻松备份
  • c++命名空间的作用及命名改编
  • 数据结构第七章(五)-散列表
  • BLIP3-o:理解和生成统一的多模态模型
  • Java 垃圾回收
  • 打卡day35
  • 产品经理常用术语大全
  • 《企业级日志该怎么打?Java日志规范、分层设计与埋点实践》
  • JWT笔记
  • 如何进行Appium实现移动端UI自动化测试?
  • 解决 Supabase “permission denied for table XXX“ 错误
  • python模块管理环境变量
  • Kafka + Flink + Spark 构建实时数仓全链路实战
  • 如何评价OpenRouter这样的大模型API聚合平台?
  • AI硬件革命:OpenAI“伴侣设备”——从概念到亿级市场的生态重构
  • c++类与对象(二)