1. (uint32_t *)p+3,
计算原理,指针指向的地址向下移动三个位置,因为地址为4个字节的类型,向下移动三个,即移动了3*4=12个字节, 指针移向了新地址
2. (enc_start - (uint32_t *)hdr) << 2
3<<2=12
指针地址差左移两位,得到的结果正好是12
3. Srtp 要加密的区域是172-12=160 byte,即去除头部的长度
4. 校验,从RTP 头部地址hdr起,最终校验的值存放的地址为头地址加长度172,即为存放校验位的地址
auth_start = (uint32_t *)hdr;
auth_tag = (uint8_t *)hdr + *pkt_octet_len;
5. Srtp_protect function
加密部分,从去除头部地址12个字节的地方开始
char * hexstr;
hexstr = octet_string_hex_string(enc_start, enc_octet_len);
writelog("hexstr1=%s",hexstr); //加密前原文
if (enc_start) {
status = cipher_encrypt(stream->rtp_cipher,
(uint8_t *)enc_start, &enc_octet_len);
if (status)
return err_status_cipher_fail;
}
memset(hexstr,0,sizeof(hexstr));
hexstr = octet_string_hex_string(enc_start, enc_octet_len);
writelog("hexstr2=%s",hexstr);//加密后密文,长度不变
校验部分,从头部开始校验
if (auth_tag) {
writelog("srtp auth tag: %s", octet_string_hex_string(auth_tag, tag_len));
/* increase the packet length by the length of the auth tag */
*pkt_octet_len += tag_len;
writelog("srtp auth tag new length: %d", *pkt_octet_len); //长度增加
}
6. 调用srtp_protect
srtp_protect(sender_srtp_ctx, &rtp.header, &nLen);
a. &msg.header, rtp 头部地址
b. &nLen,加密前的数据长度
c. 做两件事情,
• 从去除头部长度的地址起,进行加密,加密后长度不变
• 从头部开始进行校验,生成auth tag, 拼接在数据的末尾
• 把数据的长度+auth tag len, nLen被变化
7. 发送数据
write_to((char *)&rtp, nLen, m_remote_addr, m_remote_data_port)
sendto(fd,
(const char *)buf, nLen, 0, (struct sockaddr *)&sockAddr, sizeof(struct sockaddr_in));
8. Srtp_unprotect
a. 确定要校验的开始位置,从头部开始
b. 确定要解密的开始位置和结束位置,从去除头部字节的地址开始,到auth tag 前结束
校验部分
status = auth_compute(stream->rtp_auth, (uint8_t *)&est, 4, tmp_tag);
writelog("computed auth tag: %s",octet_string_hex_string(tmp_tag, tag_len));//tag_len=4
writelog("packet auth tag: %s",octet_string_hex_string(auth_tag, tag_len));
解密部分
writelog("begin decrypt,enc_octet_len=%d",enc_octet_len);//160
writelog("content =%s",octet_string_hex_string(enc_start, enc_octet_len));
if (enc_start) {
status = cipher_encrypt(stream->rtp_cipher,
(uint8_t *)enc_start, &enc_octet_len);
writelog("content =%s",octet_string_hex_string(enc_start, enc_octet_len));
if (status)
return err_status_cipher_fail;
}
9. Writelog
static FILE *err_file = NULL;
void writelog(char *format, ...) {
va_list args;
va_start(args, format);
if (err_file == NULL) {
err_file = fopen("/srtp.log","w");
}
if (err_file != NULL) {
vfprintf(err_file, format, args);
fprintf(err_file, "\n");
}
}
分享到:
相关推荐
"srtp.rar_srtp_srtp_linux_srtp协议_srtp的实现_visual c" 这个标题提到了几个关键元素,首先,“srtp.rar”表明这是一个关于SRTP(Secure Real-time Transport Protocol)的压缩文件,可能是源代码或者文档集合。...
**SRTP加密解密过程详解** SRTP(Secure Real-time Transport Protocol)是一种为RTP(Real-time Transport Protocol)提供安全性的协议,广泛应用于VoIP、视频会议等实时通信场景。SRTP的主要目标是确保RTP数据包...
【东南大学SRTP项目申请指导】 东南大学的SRTP(Scientific Research Training Program)项目是一项旨在促进学生研究实践能力培养的课外研学活动。该项目自2009年起,已建立起一套四级管理体系,包括国家级、省级、...
在Android平台上进行SRTP(Secure Real-time Transport Protocol)移植是一项重要的任务,特别是在处理音视频通信时,为了确保数据传输的安全性。SRTP是一种为实时传输协议(RTP)提供安全服务的协议,它主要应用于...
【SRTP项目报告总结】 SRTP(Scientific Research Training Program)是高校中一项旨在培养本科生科研能力的项目,让学生在导师指导下进行科学研究。通过参与SRTP项目,学生可以在本科阶段获得宝贵的科研实践经验,...
SRTP(Secure Real-Time Transport Protocol)是实时传输协议(RTP)的一个安全扩展,主要用于确保网络中的音频和视频数据在传输过程中的安全性和完整性。在游戏开发中,SRTP的应用可以保护游戏数据免受中间人攻击,...
标题"srtp加解密库"指的是Secure Real-time Transport Protocol (SRTP)的加密库,这是一个专为实时传输协议(RTP)设计的安全增强版本。SRTP通常用于保护网络音视频通话或者数据传输过程中的隐私和完整性。 描述中...
Configuring SRTP GES OPC Server and Cimplicity for PAC RX7i Communications This document highlights the basic configuration for the OPC server and
实时传输协议(Secure Real-time Transport Protocol,简称SRTP)是一种为实时数据通信提供增强安全性的协议,常用于VoIP(Voice over IP)、视频会议、在线游戏等应用中。SRTP 1.4.4是该协议的一个特定版本,通常...
根据提供的信息,我们可以了解到这是一份关于SRTP(Student Research Training Program)实验的数据记录文档,主要涉及了空间索引技术中的R树结构及其性能评估。接下来将对文档中出现的关键概念进行详细介绍,并分析...
标题"srtp.rar_srtp_srtp open_srtp r_srtp开源库"提到了"srtp",这是一个网络安全传输协议的缩写,全称为Secure Real-time Transport Protocol(安全实时传输协议)。"rar"是文件压缩格式,表示这里有关于srtp的...
**跨平台libzrtp库:比srtp更安全** libzrtp是一个开源的、跨平台的安全实时传输协议(Secure Real-time Transport Protocol, SRTP)实现,它为VoIP和其他实时媒体通信提供了额外的安全保障。相比传统的SRTP,...
libsrtp是一个实现SRTP协议(Secure Real-time Transport Protocol,安全实时传输协议)的库。chrome的WebRTC就是基于SRTP协议实现的,libjingle也使用了libsrtp。
**SRTP:安全实时传输协议** SRTP(Secure Real-time Transport Protocol)是一种为RTP(Real-time Transport Protocol)提供安全性的增强协议。RTP通常用于网络音频和视频传输,但其本身并不具备加密和完整性保护...
### SRTP项目实施指南详解 #### 一、项目概述与立项流程 SRTP,即“大学生科研训练计划”,是高等教育领域内旨在提升本科生科研能力的重要举措。2011年度,信息科学与工程学院共接收了195项SRTP项目申请。经过专家...
【国家级、省级SRTP项目结题验收答辩】是高等教育中一项重要的实践活动,旨在评估学生团队在科研训练计划(SRTP)中的工作成果。这个过程通常包括项目展示、专家提问和现场评价等环节,旨在检验学生的科研能力和创新...
"srtp-master.zip_libSRTP_srtp_srtp library" 这个标题提到了几个关键术语,首先是 "srtp-master.zip",这是一个压缩包文件名,表明里面包含的是与SRTP(Secure Real-time Transport Protocol)相关的源代码或资源...
综上所述,"srtp立项书——电动车安全系统设计ppt"是一项结合了硬件、软件和通信技术的综合性项目,旨在通过科技创新解决电动车安全问题,提升交通安全性,同时也展示了绿色能源的应用前景。该项目的成功实施将对...
**标题:“srtp加解密”** 在网络安全与通信领域,SRTP(Secure Real-time Transport Protocol)是一种增强型的RTP(Real-time Transport Protocol)协议,主要用于保护实时数据传输,如音频、视频流媒体等。SRTP是...
libsrtp, SRTP库( 安全实时传输协议) libSRTP简介这个包提供了安全实时传输协议( SRTP ) 。通用安全转换( 只是) 和支持加密内核的实现。 SRTP API记录在 include/SRTP 。h 中,并且库位于 libsrtp2.a ( 编译后) 中。...