⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtp.cpp

📁 AES一种常用的加密解密方法 AES加密解密程序源码
💻 CPP
字号:
#include "stdafx.h"
#include "Rtp.h"
/*
extern char* Key_data;
extern char* Salt_data;
extern char PT,TS,ROC;
extern char M,SSRC,L;
extern char SEQ,IV,IV';
extern char* k_s;
extern char* k_e,MTK;

extern char Saltlenth;
extern char key[25];
extern char* SRTPpacket,RTPpacket;
*/
BMTK mtk;
Aes *MyAes;

struct SRTP
{
    char V_CC;
	unsigned char M_TP;
	unsigned int SeqNum;
    long int Timestamp;
	char* SSRC;
	long int RTPExt;
	char* Payload;
	long int SRTP_MKI;
	long int Auth_tag;
}SRTPNum;

struct RTPPacket	 
{ 
    char *putout;	
	char* payload;
    int length;	 
	
	//结构体有问题
	
}RTPPacketNum;

unsigned char M;
unsigned int SEQ;
unsigned char PT;
char* SRTPpacket;
char*master_key=0;
char* master_salt=0;
char r=0,key_derivation_rate=0;
//char index=0,a=0;

char* keyinput=0;
char* x=0; 
char* k_e;
char* k_s;
int i=0,j=0;


void RTP::MDPC_MTKD_DeRTP(char *buffer,int lenth)
 { 
  SEQ=SRTPNum.SeqNum;
  SRTPpacket=SRTPNum.Payload;
  unsigned char TypeBitmap=0x7f;
  unsigned char KvBitmap=0x80;
  M=SRTPNum.M_TP&TypeBitmap;
  PT=(SRTPNum.M_TP&KvBitmap)>>7;
  master_salt=mtk.Salt_data;
  r=key_derivation_rate;
   char put[12];  
  for(i=0;i<12;i++)
	  put[i]=0;
  //i = 2^16 * ROC + SEQ.
  //a=index/r;
 
  char* x_half=0;  
  int put_lenth=0,x_lenth=0;
  if(k_e=NULL)
  {
    char label[3]="00";
	strcat(label,put);
	put_lenth=strlen(label);
	x_lenth=strlen(master_salt);
	 for(i=0;i<put_lenth;i++)
	  x_half[i]=put[i]^master_salt[i];
	 for(i=put_lenth;i<x_lenth;i++)
      x[i]=master_salt[i];
	  strcat(x,x_half);
      char k[5]="0000";
	 strcat(x,k);
	 //keyinput=(unsigned char*)x;
	strcpy(keyinput,x);
     // keyinput=x*y;
	 MyAes = new Aes(32,(unsigned char*)master_key);
	  //MyAes.Aes();
	 MyAes->Cipher((unsigned char*)keyinput,output); //加密
	 k_e=(char*)output;
  }
  else
printf("No master_key!");

   if(k_s=NULL)
  {
	   char label[3]="02";
	   strcat(label,put);
	   put_lenth=strlen(label);
	   x_lenth=strlen(master_salt);
	   for(i=0;i<put_lenth;i++)
		   x_half[i]=put[i]^master_salt[i];
	   for(i=put_lenth;i<x_lenth;i++)
		   x[i]=master_salt[i];
	   strcat(x,x_half);
	   char* k="0000";
	   strcat(x,k);
       //keyinput=x*y;
	   MyAes = new Aes(32,(unsigned char*)master_key);
	  // MyAes.Aes();
	   MyAes->Cipher((unsigned char*)keyinput,output); 
	   char* p=0;
	   int p_lenth=0;
	   p=(char*)output;
	   p_lenth=strlen(p);
	   for(int i=4;i<p_lenth;i++)
	   k_s[i]=p[i];
  }
  else
	  printf("No master_salt!");
	  

    char* m=0;
    char* k_e_m=0;
	char* IV_temp=0;
	unsigned int half;
	int IV_lenth;
	half=0x00||M||PT||SEQ;
	for(i=0;i<mtk.L;i++)
	{
	  IV_temp[i]=mtk.TS[i]||mtk.ROC[i]||mtk.SSRC[i];
	}
	IV_lenth=strlen(IV_temp);
	IV_temp[IV_lenth-2]=IV_temp[IV_lenth-2]||(half&0xff);
	IV_temp[IV_lenth-1]=IV_temp[IV_lenth-1]||((half>>8)&0xff);
	strcpy(IV,IV_temp);
	IV=IV_temp;
   //IV
	   // mtk.TS||mtk.SSRC||mtk.ROC;
   for(i=0;i<mtk.Saltlenth;i++)   
    m[i]=(k_s[i]||0x55)^k_e[i]; 
   strcpy(k_e_m,m);
   //k_e_m=k_e^m;
   MyAes=new Aes(32,(unsigned char*)k_e_m);
   MyAes->Cipher((unsigned char*)IV,output);  
   strcpy(IW,(char*)output);
   //L=N/n_b;   
    for(j=0;j<mtk.L;j++)
		s(j);
	lenth=mtk.L;
	buffer=SRTPNum.Payload;
}	

char* RtpCaculate(const char* key)
{
	for(i=0;i<j;i++)
	RTPPacketNum.payload[i]=SRTPNum.Payload[i]^key[i];
}

 
char* keyCaculate(int m,const char* key1,const char* key2)
{
   for(i=0;i<j;i++)
  stream[i]=state[i]^IW[i];
  stream[j-2]=stream[j-2]||(j&0xff);
  stream[j-1]=stream[j-1]||((j>>8)&0xff);
}

char* RTP::s(int i)
{
	char res;
	if (i==-1){return 0;}
	stream = keyCaculate(j,IW,s(j-1));
    payload_data=RtpCaculate(s(j-1));
	//stream=j^IW^s(j-1);
	//MyAes.Aes(24,k_e);
	MyAes=new Aes(32,(unsigned char*)k_e);
	MyAes->Cipher((unsigned char*)stream,output);
	strcpy(state,(char*)output);
	return(output);
}















 




















 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -