找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1139|回复: 11
收起左侧

求助大神 虚位密码技术 51单片机密码锁相关

  [复制链接]
ID:1100011 发表于 2023-12-12 00:28 | 显示全部楼层 |阅读模式
基础的密码锁已经做好了(89c52主控,矩阵键盘输入,LCD1602显示,步进电机模拟开锁,24C02储存密码),目前正确密码设置的是unsigned int类型的四位密码,键盘输入密码设置的是unsigned long类型的十位数据,想要加入虚位密码技,研究半天,代码始终是敲不顺,有没有大佬能指点一下,给个编程思路,要是可以给例程参考就再感激不过了,感谢贴吧各位大佬!!!虚位密码技术要求:不管使用者在正确密码之前、之后加几位数,只要中间有连续正确的密码,就能解锁。
回复

使用道具 举报

ID:807591 发表于 2023-12-12 08:21 | 显示全部楼层
思路不是很简单嘛,自己好好想想,别人说明白了就不香了
回复

使用道具 举报

ID:879348 发表于 2023-12-12 08:49 | 显示全部楼层
这不就是一个字符串截取检查那,string.h有现成的函数,根本不需要自己写
回复

使用道具 举报

ID:267719 发表于 2023-12-12 12:55 | 显示全部楼层
密码用一个数组表示unsigned char pass[n];//密码n个数字。初始一个密码比对指针PassIndex=0;输入的键值和pass[PassIndex]比较,如一致,则PassIndex++;否则PassIndex=0;然后判断PassIndex是否>=n,如果>=n表示密码正确。否则继续等待输入。
回复

使用道具 举报

ID:318489 发表于 2023-12-12 15:38 | 显示全部楼层
用strcmp函数就行了,C语言自带的函数
回复

使用道具 举报

ID:161164 发表于 2023-12-12 16:03 | 显示全部楼层
  1. while(Pass_L)
  2. {
  3.         int PassTemp = Pass_L%10000;
  4.         if(PassTemp == Pass_I)
  5.         {
  6.                 PassCheck = 1;
  7.                 break;
  8.         }
  9.         Pass_L/=10;
  10. }
复制代码
回复

使用道具 举报

ID:401564 发表于 2023-12-13 12:42 | 显示全部楼层
使用字符串查找函数,只要有相同的就可以
但这种密码好像也不好吧
比如,你密码是 123
那么,0123可以,1234也可以,9955123也可以?
回复

使用道具 举报

ID:584814 发表于 2023-12-18 08:51 | 显示全部楼层
zyx123 发表于 2023-12-12 15:38
用strcmp函数就行了,C语言自带的函数

这个函数是两两比对,strstr是找一串字符在另一个字符串中有无存在。
回复

使用道具 举报

ID:384109 发表于 2023-12-18 09:09 | 显示全部楼层
Y_G_G 发表于 2023-12-13 12:42
使用字符串查找函数,只要有相同的就可以
但这种密码好像也不好吧
比如,你密码是 123

就是这个意思,目的就是让看见你按密码的人不知道真密码是什么,密码结尾也可以有其他数字
回复

使用道具 举报

ID:584814 发表于 2023-12-18 09:22 | 显示全部楼层
除密码开锁外,已成熟的技术包括指纹、面容、远程遥控等,还有高级的如声纹等,还有传统的钥匙。
个人感觉所谓的虚位密码技术玩玩可以卖就是智商产品。如果你家门口有头,回放就可以找出密码(无所谓的除非你的是动态密码会变),如果是你开锁时常常处于被紧盯的状态呵呵直接110比这个东东好使。另外从技术上说理论上疑似比没有更呵呵,比如你设置成错入三次密码就上锁三十分钟的话,非固定位的虚位密码貌似可狂增猜对的可能性,而固定位的则是以给自己找麻烦求心理安慰。
实现的思路很多,例几个供参考:
1、非固定位:当输入的字符与密码的首字相同时开始逐一比对否则放弃,全对后可设开锁标志位,可随便按(可设定固定几位结束,或#或*键或某特定键结束),等结束标志出现后根据标志位操作;
2、固定位:只记录事先约定的固定位比对密码,全对后可设开锁标志位,然后在约定结束指令后操作;
3、字符比对或数字比对,接收键盘一切字符(或数字)包括无用字符,在约定结束指令后找其中有无密码字符串(或数字)的存在,然后根据标志位操作,这个呵呵你懂的。
回复

使用道具 举报

ID:276663 发表于 2023-12-18 09:56 | 显示全部楼层
个人思路:
1.监控每一次输入的按键值,当遇到第一个和密码第一位一致时,开始监控下一个按键值,如果,下一个按键值和密码第二位一样,则继续监控下一个按键值是否和密码第三位是否一致,直到密码全部正确,标记已经成功输入密码,中间出现任何一位不对,就从新对比第一位密码。等待按键输入超时或者用户确认密码,即可根据是否成功输入密码的标记来决定是否开锁。
2.这样密码基本可以无限长随便输入,无需很长的buff存储输入的密码内容。
回复

使用道具 举报

ID:1100011 发表于 2023-12-19 19:31 | 显示全部楼层
szb314 发表于 2023-12-12 08:21
思路不是很简单嘛,自己好好想想,别人说明白了就不香了

感谢,确实是这样,我想了一下换成数组储存密码之后问题就迎刃而解了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表