银联通信MAC算法

简介: 银联通信MAC算法

银联的8583通信报文,使用的mac算法总结。


void DATE_XOR1(U08 *source, U08 *dest,long size)
{
   int i;
   for(i=0; i<size; i++)
     dest[i] ^= source[i];
   return;
}
/*
*************************************************************************************************
*  异或      
*************************************************************************************************
*/
void DataXOR( U08 *source, U08 *dest, U32 size, U08 *out )
{
   int i;
   for( i = 0; i < size; i++ )
   { out[i] = dest[i] ^ source[i]; }
}
/*******************************************************
* 名称:获取报文MAC值       
* 功能:报文MAC算法         
* 入口:
*      *buf     ,要计算的数据缓冲区;buf_size,计算数据的长度
*      *key     ,密钥(8B)
* 出口:mac_buf,计算出来的MAC值(8B)
********************************************************/
void UP_Get_MAC( U08 *buf, U32 buf_size, U08 *key, U08 *mac_buf )
{                                
  U08 val[8],Abuf[8],str1[8],str2[8]; 
  U08 Bbuf[16];                //中间变量
    U08 block[512],mac[8];  
  U16 x,n;
  U16 i,j=0;
  //准备工作
  memcpy( block, buf, buf_size );                          //将输入数据赋值给临时变量block
  x = buf_size / 8;                          //计算有多少个完整的块
  n = buf_size % 8;                                        //计算最后一个块有几个字节
  if( n != 0 )                       //y非0,则在其后补上0x00...
  {
    memset( &block[x*8+n], 0x00, 8-n );             
    x += 1;                                              //将补上的这一块加上去 
  }
  //开始运算
  memset( val, 0x00, 8 );
  for( i = 0; i < x; i++ )                     //有多少块循环多少次
  {
    DATE_XOR1(&block[j], val,8);
      j += 8;                        //用于取下一块的数据
  }
   sprintf( (char *)Bbuf, "%02X%02X%02X%02X%02X%02X%02X%02X", val[0],val[1],val[2],val[3],val[4],val[5],val[6],val[7]);
   memcpy( str1, Bbuf, 8 );
   memcpy( str2, &Bbuf[8], 8 );
   CurCalc_DES_Encrypt(key,str1,mac);
   DataXOR( mac, str2, 8, Abuf ); 
   CurCalc_DES_Encrypt(key,Abuf,mac);
   memcpy(Abuf,mac,8);
   sprintf( (char *)Bbuf, "%02X%02X%02X%02X%02X%02X%02X%02X", Abuf[0],Abuf[1],Abuf[2],Abuf[3],Abuf[4],Abuf[5],Abuf[6],Abuf[7]);
   memcpy( mac_buf, Bbuf, 8 );    //前8位密钥结果放入mac_buf   
}
/*******************************************************
* 名称:获取报文MAC值
* 功能:报文MAC算法
* 入口:
* *buf ,要计算的数据缓冲区;buf_size,计算数据的长度
* *key ,密钥(8B)
* 出口:mac_buf,计算出来的MAC值(8B)
ansi x9.9 MAC算法
********************************************************/
void Ansi99X_Get_MAC( U08 *buf, U32 buf_size, U08 *key, U08 *mac_buf )
{
    U08 val[8],xor[8];
    U08 block[512];
    U16 x,n;
    U16 i,j=0;
    //准备工作
  memcpy( block, buf, buf_size ); //将输入数据赋值给临时变量block
  x = buf_size / 8; //计算有多少个完整的块
  n = buf_size % 8; //计算最后一个块有几个字节
  if( n != 0 )   //y非0,则在其后补上0x00...
  {
      memset( &block[x*8+n], 0x00, 8-n );
      x += 1; //将补上的这一块加上去
  }
  //开始运算
  memset( val, 0x00, 8 );
  for( i = 0; i < x; i++ )   //有多少块循环多少次
  {
      DataXOR(val,&block[j], 8,xor);
      CurCalc_DES_Encrypt(key,xor,val);//DES加密
      j += 8;  //用于取下一块的数据
  }
  memcpy(mac_buf,val, 8 );
}
相关文章
|
5月前
|
负载均衡 算法 5G
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
m基于5G通信的超密集网络多连接负载均衡和资源分配算法matlab仿真
114 4
|
1月前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
23 0
|
2月前
|
算法 Android开发
安卓逆向 -- 自吐算法(MAC)
安卓逆向 -- 自吐算法(MAC)
22 1
|
2月前
|
算法 JavaScript Java
安卓逆向 -- 算法基础(MAC)
安卓逆向 -- 算法基础(MAC)
9 1
|
3月前
|
算法 5G
基于MIMO通信系统的球形译码算法matlab性能仿真,对比PSK检测,SDR检测
基于MIMO通信系统的球形译码算法matlab性能仿真,对比PSK检测,SDR检测
|
4月前
|
消息中间件 存储 算法
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)
82 0
|
5月前
|
编解码 算法 5G
2023年秋招算法:Tp-link 通信算法提前批
2023年秋招算法:Tp-link 通信算法提前批
28 0
|
9月前
|
缓存 网络协议
通过ARP协议实验,设置错误的IP和MAC地址的静态绑定项目,会使得两台主机之间无法通信,而删除该项目后可恢复通信,分析其原因。
通过ARP协议实验,设置错误的IP和MAC地址的静态绑定项目,会使得两台主机之间无法通信,而删除该项目后可恢复通信,分析其原因。
137 0
|
9月前
|
算法
【路径规划】基于Dijkstra算法及Floyd算法的通信与网络路径规划(Matlab代码实现)
【路径规划】基于Dijkstra算法及Floyd算法的通信与网络路径规划(Matlab代码实现)
|
10月前
|
算法 数据安全/隐私保护
ANSI-X99MAC算法和PBOC的3DES MAC算法
ANSI-X99MAC算法和PBOC的3DES MAC算法
ANSI-X99MAC算法和PBOC的3DES MAC算法