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

焦作网站建设哪家权威域名申请哪家好

焦作网站建设哪家权威,域名申请哪家好,网站建设网站建设的网络,注册资金可以乱写吗MqttProtocol::SendAudio()对输入的音频数据进行加密处理&#xff0c;通过UDP发送加密后的音频数据。 源码&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区&#xff0c;确保同一时间只有一个线程可以访问该…

MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据。
源码:

void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区,确保同一时间只有一个线程可以访问该函数内的共享资源std::lock_guard<std::mutex> lock(channel_mutex_);// 检查udp_指针是否为空,如果为空则直接返回,避免后续操作出现空指针异常if (udp_ == nullptr) {return;}// 复制aes_nonce_到nonce字符串中,用于后续加密操作std::string nonce(aes_nonce_);// 将音频数据的大小(以网络字节序)存储到nonce字符串的第2个字节开始的位置*(uint16_t*)&nonce[2] = htons(data.size());// 将本地序列号(以网络字节序)存储到nonce字符串的第12个字节开始的位置,并递增本地序列号*(uint32_t*)&nonce[12] = htonl(++local_sequence_);// 创建一个字符串encrypted,用于存储加密后的数据,其大小为nonce的大小加上音频数据的大小std::string encrypted;encrypted.resize(aes_nonce_.size() + data.size());// 将nonce数据复制到encrypted字符串的开头memcpy(encrypted.data(), nonce.data(), nonce.size());// 初始化计数器偏移量size_t nc_off = 0;// 初始化一个16字节的流块,用于AES加密uint8_t stream_block[16] = {0};// 使用AES-CTR模式对音频数据进行加密if (mbedtls_aes_crypt_ctr(&aes_ctx_, data.size(), &nc_off, (uint8_t*)nonce.c_str(), stream_block,(uint8_t*)data.data(), (uint8_t*)&encrypted[nonce.size()]) != 0) {// 如果加密失败,记录错误日志并返回ESP_LOGE(TAG, "Failed to encrypt audio data");return;}// 通过UDP发送加密后的音频数据udp_->Send(encrypted);
}

以下是对 MqttProtocol::SendAudio 函数的详细解释:

函数概述

MqttProtocol::SendAudio 函数的主要功能是对输入的音频数据进行加密处理,然后通过UDP(User Datagram Protocol)发送加密后的音频数据。

代码详细解释

void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区,确保同一时间只有一个线程可以访问该函数内的共享资源std::lock_guard<std::mutex> lock(channel_mutex_);// 检查udp_指针是否为空,如果为空则直接返回,避免后续操作出现空指针异常if (udp_ == nullptr) {return;}// 复制aes_nonce_到nonce字符串中,用于后续加密操作std::string nonce(aes_nonce_);// 将音频数据的大小(以网络字节序)存储到nonce字符串的第2个字节开始的位置*(uint16_t*)&nonce[2] = htons(data.size());// 将本地序列号(以网络字节序)存储到nonce字符串的第12个字节开始的位置,并递增本地序列号*(uint32_t*)&nonce[12] = htonl(++local_sequence_);// 创建一个字符串encrypted,用于存储加密后的数据,其大小为nonce的大小加上音频数据的大小std::string encrypted;encrypted.resize(aes_nonce_.size() + data.size());// 将nonce数据复制到encrypted字符串的开头memcpy(encrypted.data(), nonce.data(), nonce.size());// 初始化计数器偏移量size_t nc_off = 0;// 初始化一个16字节的流块,用于AES加密uint8_t stream_block[16] = {0};// 使用AES-CTR模式对音频数据进行加密if (mbedtls_aes_crypt_ctr(&aes_ctx_, data.size(), &nc_off, (uint8_t*)nonce.c_str(), stream_block,(uint8_t*)data.data(), (uint8_t*)&encrypted[nonce.size()]) != 0) {// 如果加密失败,记录错误日志并返回ESP_LOGE(TAG, "Failed to encrypt audio data");return;}// 通过UDP发送加密后的音频数据udp_->Send(encrypted);
}

各部分详细解释

  1. 互斥锁保护

    std::lock_guard<std::mutex> lock(channel_mutex_);
    

    使用 std::lock_guard 来自动管理 channel_mutex_ 互斥锁,确保同一时间只有一个线程可以访问该函数内的共享资源,避免数据竞争。

  2. 空指针检查

    if (udp_ == nullptr) {return;
    }
    

    检查 udp_ 指针是否为空,如果为空则直接返回,避免后续操作出现空指针异常。

  3. 准备加密参数

    std::string nonce(aes_nonce_);
    *(uint16_t*)&nonce[2] = htons(data.size());
    *(uint32_t*)&nonce[12] = htonl(++local_sequence_);
    
    • 复制 aes_nonce_nonce 字符串中。
    • 将音频数据的大小(以网络字节序)存储到 nonce 字符串的第2个字节开始的位置。
    • 将本地序列号(以网络字节序)存储到 nonce 字符串的第12个字节开始的位置,并递增本地序列号。
  4. 初始化加密结果字符串

    std::string encrypted;
    encrypted.resize(aes_nonce_.size() + data.size());
    memcpy(encrypted.data(), nonce.data(), nonce.size());
    
    • 创建一个字符串 encrypted,用于存储加密后的数据,其大小为 nonce 的大小加上音频数据的大小。
    • nonce 数据复制到 encrypted 字符串的开头。
  5. AES-CTR加密

    size_t nc_off = 0;
    uint8_t stream_block[16] = {0};
    if (mbedtls_aes_crypt_ctr(&aes_ctx_, data.size(), &nc_off, (uint8_t*)nonce.c_str(), stream_block,(uint8_t*)data.data(), (uint8_t*)&encrypted[nonce.size()]) != 0) {ESP_LOGE(TAG, "Failed to encrypt audio data");return;
    }
    
    • 初始化计数器偏移量 nc_off 和流块 stream_block
    • 使用 mbedtls_aes_crypt_ctr 函数对音频数据进行加密,将加密结果存储在 encrypted 字符串中。
    • 如果加密失败,记录错误日志并返回。
  6. 发送加密后的数据

    udp_->Send(encrypted);
    

    通过UDP发送加密后的音频数据。

http://www.dtcms.com/wzjs/75452.html

相关文章:

  • 小游戏网站怎么做建站免费涨热度软件
  • 深圳定制网站制作厂家徐州seo网站推广
  • logo设计在线生成 免费人教版优化设计电子书
  • 网站开发招聘年薪关键词app下载
  • vs2017网站开发教程靠谱的代运营公司有哪些
  • 梅州seo广州软件系统开发seo推广
  • 哪些网站可以做招生信息迅速上排名网站优化
  • 电子商务网站设计的书宣传推广网络推广
  • 石家庄电商网站企业培训体系
  • 服务器win2003安装wordpress关键词优化排名首页
  • 风雨同舟 网站建设网站出售
  • 淄博百度网站建设成品ppt网站国外
  • 可以做雷达图的网站企业培训课程有哪些内容
  • 网站开发信息平台项目总结推广小程序
  • 营销网站的策划方案怎么做免费建站哪个最好
  • 网站推广只能使用在线手段进行互联网推广引流公司
  • 哪些网站需要备案六种常见的网站类型
  • 网站创建于嵌入式培训
  • 厦门做网站的公司品牌软文案例
  • 黄岛做网站百度个人中心登录
  • 销售网站制作怎么做seo的收费标准
  • 包头网站开发关键词歌词完整版
  • 深圳做的好的电子行业招聘网站电脑编程培训学校哪家好
  • 装潢设计属于什么专业类别seo优化内页排名
  • 我想做网站怎么做china东莞seo
  • 网站后台数据应该怎么做seo外链增加
  • 网站是做流程图在线网络培训平台
  • 苏州外贸公司网站建设流程图搜索引擎seo外包
  • 东营做网站优化公司竞价推广课程
  • 哪个网站注册域名好公司推广策划方案