安全语音通信系统python
安全语音通信系统
项目简介
安全语音通信系统是一个基于UDP协议的实时加密语音通信应用,采用客户端-服务器架构设计。系统支持用户注册、登录、加密语音通话,以及通话录制等功能。通过采用先进的AES加密技术(基于Fernet实现),确保通信内容的安全性和私密性,可用于需要保密的语音通信场景。
功能特点
核心功能
- 用户管理:支持用户注册、登录和登出
- 加密语音通话:实时、低延迟的语音通信,支持点对点加密
- 安全性保障:采用Fernet加密(基于AES-128-CBC),每个用户拥有独立密钥
- 密钥交换:基于服务器中转的安全密钥交换机制
- 音频处理:采用DCT(离散余弦变换)进行音频压缩处理
- 通话录制:支持录制原始音频、DCT变换后数据及加密数据
技术特点
- NAT穿透:支持服务器中继模式,解决NAT网络环境下的连接问题
- 音频优化:高频衰减、噪声阈值和动态范围压缩,提升音质
- 设备兼容性:自动适配多种音频设备,支持不同通道配置
- 网络诊断:内置网络连接测试和问题诊断功能
- 心跳机制:保持连接活跃,及时检测断线情况
系统架构
系统由三部分组成:
-
客户端(improved_client.py)
- 用户界面:基于Tkinter构建的图形用户界面
- 音频处理:使用numpy和scipy进行音频采集、变换和播放
- 加密模块:使用cryptography.fernet实现端到端加密
- 通信模块:基于UDP协议的网络通信
-
服务器(improved_server.py)
- 用户管理:用户注册、身份验证和状态维护
- 会话管理:呼叫请求处理和通话会话维护
- 密钥分发:安全地分发和交换用户密钥
- 数据中继:可选的音频数据中继功能(解决NAT问题)
-
数据库
- SQLite数据库(voice_users.db):存储用户账号、密码和加密密钥
数据流程
发送端流程
- 采集音频 →
- DCT变换(数据压缩)→
- 加密(可选)→
- 添加帧头(时间戳、序列号)→
- UDP发送
接收端流程
- 接收UDP数据包 →
- 解密(可选)→
- 解析帧头 →
- 逆DCT变换 →
- 音频输出
录音逻辑
- 原始音频数据写入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版本
-
安装Python 3.7或更高版本(如果尚未安装)
brew install python3
-
安装依赖库
pip3 install numpy scipy sounddevice cryptography netifaces
-
下载项目文件
- improved_client.py:客户端程序
- improved_server.py:服务器程序
Windows版本
-
安装Python 3.7或更高版本(从python.org下载)
-
安装依赖库
pip install numpy scipy sounddevice cryptography netifaces
-
下载项目文件
- improved_client.py:客户端程序
- improved_server.py:服务器程序
使用方法
启动服务器
- 打开终端或命令提示符,切换到项目目录
- 运行服务器程序
python improved_server.py
- 在服务器界面设置监听地址和端口(默认为0.0.0.0:9999)
- 点击"启动服务"按钮
客户端使用
- 运行客户端程序
python improved_client.py
- 连接服务器
- 输入服务器IP地址和端口
- 注册新账号或使用现有账号登录
- 进行通话
- 输入目标用户ID并点击"开始通话"
- 等待对方接受通话请求
- 通话过程中可选择启用加密和录音功能
- 点击"结束通话"结束当前通话
音频设备配置
- 在配置选项中选择合适的输入设备(麦克风)和输出设备(扬声器)
- 系统会自动适配设备的通道数和采样率
安全机制
密钥管理
- 用户密钥生成:注册时为每个用户生成唯一的Fernet密钥
- 密钥保护:用户密钥使用预共享密钥(PRE_SHARED_KEY)加密后存储在数据库中
- 密钥交换:通话建立时,服务器负责安全地交换双方密钥
通话加密
- 发送方使用自己的密钥加密音频数据
- 接收方使用发送方的密钥解密接收到的数据
- 全程端到端加密,即使数据经过服务器中继也无法被解密
高级功能
网络诊断
点击"网络诊断"按钮,系统会执行以下检查:
- 检测可用网络接口
- 测试与服务器的连接
- 显示诊断结果
用户状态查询
- 使用"检查状态"按钮可查询特定用户是否在线
- 使用"获取在线用户"按钮获取当前所有在线用户列表
音频优化参数
可在代码中调整以下参数以优化音频质量:
blocksize
:音频块大小,影响延迟fs
:采样率,默认44100Hzhigh_freq_attenuation
:高频衰减系数noise_threshold
:噪声阈值dynamic_range
:动态范围压缩系数
常见问题与解决方案
连接问题
- 问题:无法连接到服务器
- 解决方案:
- 检查服务器是否正常运行
- 确认IP地址和端口是否正确
- 检查网络连接和防火墙设置
音频问题
- 问题:听不到对方声音或对方听不到自己
- 解决方案:
- 检查音频设备选择是否正确
- 确认麦克风和扬声器工作正常
- 尝试重新建立通话连接
加密问题
- 问题:启用加密后无法正常通话
- 解决方案:
- 确保双方使用的预共享密钥相同
- 检查密钥交换过程是否成功
- 尝试重新登录并建立通话