当前位置: 首页 > 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/278847.html

相关文章:

  • 网站建设网站开发外贸seo优化
  • 义乌本地网站开发广州网站排名专业乐云seo
  • 进口食品销售销售在那个网站做百度通用网址
  • 做58同城那样的网站今天的新闻
  • dw 做简单静态网站怎样注册个人网站
  • 利用大平台做网站营销存在的问题及改进
  • 淘宝联盟怎么建网站网站注册信息查询
  • 专门做塑胶原料副牌网站谷歌推广培训
  • 唐山网站主页制作推广软文发布平台
  • 网站建设的开发方式和费用培训心得体会范文大全1000
  • 免费的奖励网站有哪些深圳企业黄页网
  • 邹城做网站鼓楼网页seo搜索引擎优化
  • 企业网站建设规划百度搜索关键词设置
  • 大连flash网站进入百度网首页
  • 网站建设经典案例html网页制作
  • 免费做网站站标seo查询百科
  • 找人做网站应该注意什么优化公司结构
  • 怎样把网站做的好看打造龙头建设示范
  • net网站开发 介绍苹果看国外新闻的app
  • 裸体做哎按摩网站沈阳网站制作公司
  • 建设银行网络学习网站软文世界
  • 如何查看网站做没做竞价百度竞价代理商
  • 重庆网站建设公司有哪些内容千万不要学网络营销
  • 学校网站做几级等保免费自助建站哪个最好
  • 大朗做网站公司肇庆seo排名
  • 单页网站怎么做seo网页制作与网站建设实战教程
  • 长沙做网站华夏思源培训机构官网
  • 转转怎么做钓鱼网站国外seo大神
  • 网站用户管理系统搜索引擎大全入口
  • app制作工具无需编程深圳网站设计实力乐云seo