无线遥控器解码程式

本文分享了一个用于解码Keeloq滚动码的程序,该程序经过修改并在VC和C51平台上进行了测试。文章详细介绍了实现解码过程的三个核心函数:字节交换(SWAPF)、带进位左移(RCL)及Keeloq解码(Decrypt)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个被遗忘的CSDN号码今日起开始启用,希望借助CSDN这个强大的平台和大家一起交流学习!

以前参照网络上某仁兄的程序修改的滚动码解码程序,在VC上合C51上通过测试,贴一个和大家一起分享,请指教。

unsigned char idata C_F = 0;    

/*
*********************************************************************************************************
** 函数名称 :SWAPF();
** 函数功能 :将NUM的高低字节互换;
** 入口参数 :num:待修改数据;
** 出口参数 :num;
*********************************************************************************************************
*/
unsigned char SWAPF(unsigned char num)
{
 return (num>>4) | (num<<4) ; 
}

/*
*********************************************************************************************************
** 函数名称 :RCL();
** 函数功能 :带进位左移;
** 入口参数 :num:带移数据,n:移动位数,C_F:进位标志位;
** 出口参数 :RCL:移位结果返回,C_F:本次移位进位标志;
*********************************************************************************************************
*/
unsigned char RCL ( unsigned char num ,unsigned char n)
{
 unsigned char i = 0;
 unsigned char temp = 0;
 unsigned char cf1 = 0;//,cf2;
 temp = num;            
 if ( n != 0 )           
 {                 
  for(i = 0 ; i < n ; i++)       
  {
   cf1 = temp & 0x80;
   temp = ( temp << 1 ) | C_F;
   C_F = cf1 >> 7;
  }
 }
 return temp;
}

/*
*********************************************************************************************************
** 函数名称 :Decrypt();
** 函数功能 :keeloq解码子程序;
** 入口参数 :key[]:编解码厂商密码,hop[]:接收的滚动码;
** 出口参数 :hop[]:
*********************************************************************************************************
*/
void Decrypt(unsigned char key[], unsigned char hop[] )
 {
     unsigned char i = 0;
  unsigned char j = 0;
  unsigned char key1 = 0;
  unsigned char aux = 0;
  unsigned char temp = 0;
     signed char p = 6;

     for (j = 66; j > 0; j--)  

     {
        key1 = key[p++];
        if ( p > 7) p = 0;
        for (i = 8; i > 0; i--)  

        {
          if (hop[0] & (1 << 6))                         

          {
             if (!(hop[0] & (1 << 1)))                    

    {
              aux = 0x3a;
    }
             else
    {
     aux = 0x5c;
    }
          }
         else
         {
    if (!(hop[0] & (1 << 1)))                   

       {
        aux = 0x74;
    }
             else
       {
        aux = 0x2e; 
    }
         }

         if (hop[1] & (1 << 3))
   {
     aux = SWAPF(aux);   

   }
               
         if (hop[2] & (1 << 0))
   {
    aux <<= 2;                 
   }
               
         if (hop[3] & (1 << 0))
   {
     aux <<= 1;             

   }
               
         aux ^= hop[2] ^ hop[0] ^ key1;                   
         temp = RCL(aux,1);
   hop[3] = RCL(hop[3], 1);
         hop[2] = RCL(hop[2], 1);
         hop[1] = RCL(hop[1], 1);
         hop[0] = RCL(hop[0], 1);                                          

   key1 = key1<<1;
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值