目录

实验要求

方案步骤与改进

代码分析

结果展示


实验要求

从散列锁Hash-lock协议、随机Hash锁协议、供应链RFID协议、LCAP协议中选取一种方案,实现RFID的安全机制。

上课时老师提了一嘴要求哈希函数查找、存储与防冲突,我分析了四种实现方案,发现LCAP协议是最有可能实现防冲突的,所以我选取了LCAP协议。同时,我也对此协议进行了一定的改进。

方案步骤与改进

前提:模拟数据库的存储与标签。

数据库中以哈希表存储电子标签id与其哈希值,哈希值初始为-1,如果是其他值则代表其对应了电子标签id。电子标签id的哈希值计算方法为id mod 20。Eg:24568 mod 20=8,故H[8]=24568。

需要注意的是,默认初始id的哈希值是不冲突的。

模拟四个标签,从tagID[1]至tagID[4]里面存放的是四个标签的id。

步骤:

  1. 阅读器生成随机数R,并传递给电子标签。
  2. 电子标签计算并传给阅读器H(ID)、 Hl(ID||R);阅读器将H(ID)和Hl(id||r)与R传递给数据库。
  3. 数据库计首先检索H(ID),若标签存在,则验证通过,算得Hr(ID||R)。后端数据库进行更新,测试经过ID=ID^R和ID mod 20后该地址是否已存在数据,若存在,则重新产生一个随机数S,重复上述过程直至更新后所需地址不冲突,若不存在,则令S=R。更新数据库ID=ID^S与哈希表。将S与Hr(id||r)->阅读器->电子标签。
  4. 电子标签首先验证Hr(ID||R)是否正确,若验证通过,则更新ID=ID^S。

代码分析

下面我按照步骤里的顺序一步步的分析代码。

1.生成随机数R

这一步就很easy了,我取得随机数范围为[10,100),当然也可以根据不同情况取其他值。

int Query(){srand((int)time(0));int R = rand()%(90)+10;cout << "1.阅读器生成随机数R:" << R << endl;return R;
}

2.电子标签计算并传给阅读器H(ID)、 Hl(ID||R)。

这里需要,写hash函数,我使用的hash也比较简单,直接用的是取模hhhhh,大佬们可以替换更加复杂的hash函数。

Hl(ID||R)取ID||R的哈希值的左半部分,因此做了一些处理,例如12345取得应为123,相应的右半部分为45;1234取得应为12,应的右半部分为34。

int hash_mod(int id){return (id % 20);
}
int hash_l(int id,int r){string a = to_string(id);string b = to_string(r);a = a+b;int idr = stoi(a);idr = idr % 12345;a = to_string(idr);int len = a.size();string c;for(int i=0;i<(len+1)/2;i++){c[i] = a[i];}int hidr = stoi(c);return hidr;
}

3.

(1)数据库计首先检索H(ID),若标签存在,则验证通过,算得Hr(ID||R)。

H(ID)调用上述函数;Hr(ID||R)与Hl类似,只需要在for循环稍作改进,for(int i=(len+1)/2;i=len;i++)

(2)数据库的id更新。

这一点就是比较头疼的了,首先我们不能使用常规的放冲突方法,比如线性探测法、平方探测法等,如果用上述方法仅仅是使id在数据库中修改,给他在哈希表中找了一个位置而已,下次标签的id计算hash值的时候他又不知道你这些方法加的什么值(好气哦)!!!!因此我自作主张加了一个s变量。(虽然现实生活中可能不行,毕竟人家协议既然有,就说明有更好的解决办法,但是我没有更好的解决办法了..............)废话不多说,先上防冲突代码:

int find(int h[],int temp,int r){int num,s;h[temp] = h[temp]^r;num = h[temp]%20;while(num!=temp && h[num]!=-1){h[temp] = h[temp]^r;srand((int)time(0));s = rand()%(90)+10;h[temp] = h[temp]^s;num = h[temp]%20;r = s;};if(num == temp){return r;}else{h[num] = h[temp]; h[temp] = -1;}return r;
}

主要想法是,如果这个坑被占了,我们就换一个,让每个坑怎么换只有一个值对应。

R不行我们就换个random number,这个不行我们再换一个,一直到他行为止。(好强盗hhh)

最后把确定换的值输出,即为S。

4.电子标签首先验证Hr(ID||R)是否正确,若验证通过,则更新ID=ID^S。

这没啥说的了

最后附一个main函数:

结果展示

在我完成本实验后,发现了一个问题,就是若电子标签验证不通过,阅读器哈希表存的id如何退回。如果不退回,则会造成标签的误改,给系统留下巨大的安全隐患,希望各位能给给意见。

 债见!

RFID标签的安全机制——LCAP协议的C++代码实现相关推荐

  1. RFID标签EPC物品编码区PC协议控制字编码解析

    RFID标签物品编码区(EPC区)由CRC-16.PC(协议控制).EPC三部分组成. PC协议控制字包含标签物理层的信息,标签在每一次盘存操作中通过它的物品编码区EPC返回这些信息.PC协议控制一共 ...

  2. 网络原理 | TCP/IP中的连接管理机制 重要协议与核心机制

    应用层.传输层.网络层.数据链路层.物理层 一.应用层协议 应用层 是程序猿最最经常打交道的一层 其他四层,都是操作系统.驱动.硬件,实现好了的,咱们不需要管 (除非你是系统工程师,驱动开发工程师-- ...

  3. RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)

    RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)) 前言 一.如何认识芯片? 1. 1 怎么找芯片资料? 1. 2 芯片资料怎么看? 二.我认识的芯片 1.Alien(美国意联科技公司( ...

  4. Quad Industries、Agfa等公司合作推出塑料12位RFID标签和带有丝印印刷电路的读出

    Quad Industries.Agfa.imec和TNO宣布展出一款塑料12位RFID标签和带有丝印印刷电路的读出系统.该系统集成了一个屏幕印刷天线和印制触摸用户界面,可实现在曲面上读取.该公司报告 ...

  5. RFID标签的知识(1)--从频率开始

    RFID标签的知识 (1)--从频率开始 前言 RFID标签属于物联网感知层里用来进行数据采集比较常见.易操作的的方式,其分类方式有很多,这篇文先就频率来对RFID标签进行个大概分类(以下仅个人见解, ...

  6. 桌面式FDX-B格式工业级低频RFID标签编码器|读写器CK-TR05-US读写卡操作流程

    桌面式工业级低频RFID标签编码器|读写器CK-TR05-US支持125KHZ.134.2KHZ频段ID卡读写,支持FDX-B格式数据读写,本文将重点介绍桌面式FDX-B格式工业级低频RFID标签编码 ...

  7. CK-S640-AP60E半导体自动化低频RFID标签工业读卡器|读写器与西门子PLC配置指南

    CK-S640-AP60E半导体自动化低频RFID标签工业读卡器|读写器是一款基于射频识别技术的低频RFID标签读卡器,读卡器工作频率134.2kHz.该读卡器支持标准工业半导体SECS协议和 Pro ...

  8. 铨顺宏RFID:错综复杂的地下管道用RFID标签能完成管理吗?

    RFID技术性使地底管网系统软件可以开展国际化的信息管理方法,提升管路的布署,日常保护和运作管理能力.现阶段地底管网资源优化配置方式已基本上不可以融入日益增加的管网业务流程要求,在较大水平上阻碍了城市 ...

  9. RFID标签防伪造方法总结(物理方法)

    一.需要解决的问题 从工作原理来看,RFID系统一般由电子标签.读写器.发射接收天线组成.标签在RFID系统作为数据载体,与读写器之间属于无线通信,形式上来讲属于开放式,数据易被非法获取.复制.篡改. ...

最新文章

  1. 在LINQ to SQL中使用Translate方法以及修改查询用SQL
  2. msp430入门编程42
  3. oracle安装要多久,一次耗时4天的oracle安装过程
  4. 句句真研—每日长难句打卡Day13
  5. 小分子php蛋白,如何研究小分子抑制蛋白降解途径? - 分子生物 - 小木虫 - 学术 科研 互动社区...
  6. oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)
  7. Luogu P4161 [SCOI2009]游戏 数论+DP
  8. 如何让Tuxera NTFS总是挂载不干净的卷?
  9. 如何使用python处理nc数据制作Mike风场文件--以ERA5数据为例
  10. 根据Word模板动态生成PDF
  11. JTAG与SWD接口定义
  12. 2010.4 计算机二级等级考试 vb上机试题 第一套 的答案,2012年计算机二级VB上机试题及解题思路第44套...
  13. 群晖docker位置_OMV利用Docker配置nextcloud,实现个人网盘的搭建!
  14. DAX——FILTER
  15. sparc处理器开发工具_SPARC处理器启动代码的分析与编程
  16. CSS基础-09-布局(定位 position、浮动float,元素对其、图像对其、文本对齐、元素内内容对齐,元素堆叠)
  17. 【WebService笔记01】使用JWS实现WebService接口的发布和调用
  18. jvm一般相关配置OutOfMemoryError关参数配置解释
  19. 2020.10.21--PS--梦幻柔焦、中途曝光、制作素描照片
  20. [RK3399]触摸屏汇顶gt9xx调试

热门文章

  1. Elment ui中el-table 实现表格拖拽
  2. C语言--Union类型的使用方法
  3. 双精度浮点数的取绝对值
  4. 彻底搞懂隐式类型转换
  5. JS中正则表达式常用语法总结
  6. mongo写入mysql_从mysql读取数据写入mongo
  7. Juniper初始化之配置管理接口
  8. 三菱4轴控制伺服案例,三菱PLC FX3U加三菱1PG定位模 块控制4个松下伺服,有完整的注释,结构清晰明了。伺服控制程序JOG HOME 定位 全部写成了功能块FB .你可以直接拿过去用
  9. unity 卡通风格渲染
  10. 如何在pdf中加入手写签名