打印
[电路设计]

早晨起床,完成菜农老师昨天晚上布置CRC32碰撞作业

[复制链接]
3052|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CC2530|  楼主 | 2011-6-3 07:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 CC2530 于 2011-6-3 13:07 编辑

https://bbs.21ic.com/icview-240248-1-1.html
作业题:
1.现有一串数据xxxxxxxx0123456789abcdef,知道其crc32结果为12345678,求xxxxxxxx是多少
2.现有一串数据01234567xxxxxxxx89abcdef,知道其crc32结果为12345678,求xxxxxxxx是多少

答案:
#include "uni_int.h"
#include <stdlib.h>

uint32 crc32l_update_byte(uint32 crc_in,uint8 data);
uint32 crc32l_update_word(uint32 crc_in,uint16 data);
uint32 crc32l_update_dword(uint32 crc_in,uint32 data);
uint32 crc32l_update_nibble(uint32 crc_in,uint8 data);
uint32 crc32l_dis_update_dword(uint32 crc_out,uint32 data);
uint32 crc32l_dis_update_word(uint32 crc_out,uint16 data);
uint32 crc32l_dis_update_byte(uint32 crc_out,uint8 data);
uint32 crc32l_dis_update_nibble(uint32 crc_out,uint8 data);
uint8 crc32l_calculate(uint32 crc_in,const uint8 *data,uint16 size);
volatile uint32 A;
volatile uint32 B;
int main(void)
{
  A=0xFFFFFFFF;
  A=crc32l_update_dword(A,0X12345678);  
  A=crc32l_dis_update_dword(A,0X12345678);  //恢复初值
  
  A=0xFFFFFFFF;
  A=crc32l_update_word(A,0X1234);  
  A=crc32l_update_word(A,0X5678);
  A=crc32l_dis_update_word(A,0X5678);
  A=crc32l_dis_update_word(A,0X1234);  //恢复初值
  
  
  A=0xFFFFFFFF;
  A=crc32l_update_byte(A,0X12);
  A=crc32l_update_byte(A,0X34);
  A=crc32l_update_byte(A,0X56);
  A=crc32l_update_byte(A,0X78);
  A=crc32l_dis_update_byte(A,0X78);
  A=crc32l_dis_update_byte(A,0X56);
  A=crc32l_dis_update_byte(A,0X34);
  A=crc32l_dis_update_byte(A,0X12);   //恢复初值
  
  A=0xFFFFFFFF;
  A=crc32l_update_nibble(A,0X1);
  A=crc32l_update_nibble(A,0X2);
  A=crc32l_update_nibble(A,0X3);
  A=crc32l_update_nibble(A,0X4);
  A=crc32l_update_nibble(A,0X5);
  A=crc32l_update_nibble(A,0X6);
  A=crc32l_update_nibble(A,0X7);
  A=crc32l_update_nibble(A,0X8);
  
  A=crc32l_dis_update_nibble(A,0X8);
  A=crc32l_dis_update_nibble(A,0X7);
  A=crc32l_dis_update_nibble(A,0X6);
  A=crc32l_dis_update_nibble(A,0X5);
  A=crc32l_dis_update_nibble(A,0X4);
  A=crc32l_dis_update_nibble(A,0X3);
  A=crc32l_dis_update_nibble(A,0X2);
  A=crc32l_dis_update_nibble(A,0X1);  //恢复初值
  
  
  //作业:
  //1.现有一串数据xxxxxxxx0123456789abcdef,知道其crc32结果为12345678,求xxxxxxxx是多少
  A=0x12345678;
  A=crc32l_dis_update_dword(A,0x89abcdef);
  A=crc32l_dis_update_dword(A,0x01234567);  
  A=crc32l_dis_update_dword(A,0xFFFFFFFF);   //得0x0D1AD0D8
  //答xxxxxxxx是0D1AD0D8
  
  //检验:
  A=0xFFFFFFFF;
  A=crc32l_update_dword(A,0x0D1AD0D8);
  A=crc32l_update_dword(A,0x01234567);
  A=crc32l_update_dword(A,0x89abcdef);       //得0x12345678
  
  
//2.现有一串数据01234567xxxxxxxx89abcdef,知道其crc32结果为12345678,求xxxxxxxx是多少
  A=0xFFFFFFFF;
  A=crc32l_update_dword(A,0x01234567);   
  B=A;                                    //保存结果
  A=0x12345678;
  A=crc32l_dis_update_dword(A,0x89abcdef);      
  A=crc32l_dis_update_dword(A,B);            //得0x2D2F927A
   
  //检验:
  A=0xFFFFFFFF;
  A=crc32l_update_dword(A,0x01234567);
  A=crc32l_update_dword(A,0x2D2F927A);
  A=crc32l_update_dword(A,0x89abcdef);       //得0x12345678  
  //答xxxxxxxx是2D2F927A
  
  
  while(1);
}

相关帖子

沙发
hotpower| | 2011-6-3 07:54 | 只看该作者
哈哈,不错~~~裤子奖励

使用特权

评论回复
板凳
chasedreamsl| | 2011-6-3 08:13 | 只看该作者
这个要顶。

使用特权

评论回复
地板
CC2530|  楼主 | 2011-6-3 09:01 | 只看该作者
CRC32下一道作业题:
有96个BIT,其中连续32bit未知,其余64bit已知,CRC32校验值为已知,求这32bit值

使用特权

评论回复
5
plc_avr| | 2011-6-3 09:24 | 只看该作者
顶,上官加油!

使用特权

评论回复
6
plc_avr| | 2011-6-3 09:33 | 只看该作者
有空时请上传整个工程文件吧,谢谢!

使用特权

评论回复
7
hotpower| | 2011-6-3 11:12 | 只看该作者
终于有人陪俺玩crc了,不容易呀,在21ic快8年了,第一次有人用心去玩。

使用特权

评论回复
8
jack_shine| | 2011-6-3 16:46 | 只看该作者
7楼找到知音了,恭喜

使用特权

评论回复
9
jack_shine| | 2011-6-3 16:47 | 只看该作者
crc是循环冗余校验码的意思吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:该死的ST,还不赶快出STM8L小FLASH片子

0

主题

262

帖子

1

粉丝