提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、虚位密码是什么?
  • 二、虚位密码如何实现?
    • 1.使用已存在的函数
    • 2.暴力匹配算法
    • 3.KMP模式匹配算法

前言

提示:这里可以添加本文要记录的大概内容:

作者最近在做一个基于STM32的智能锁设计,而结束完工之后,总觉得自己的设计缺少创新。碰巧这时,我了解到了虚位密码设计,于是对自己的项目做了一些改进。


提示:以下是本篇文章正文内容,下面案例可供参考

一、虚位密码是什么?

首先,我们要了解的是虚位密码是什么。现如今,密码开锁的方式已经广泛应用于各个领域,而在输入密码时,很难保证附近没有行人路过。人短时间能记住的无规律数字最大为7位,而市面上门锁密码大多为6位及以下,这就有了密码泄露的风险。

虚位密码,就是可以在正确密码前后输入任意位数的数字,只要所输入的所有数字中包含正确、未拆分的密码,即可识别成功,完成解锁。下面我放上一张略为简陋的图片。如图所示,红色部分“123456”为正确密码,前后的*即代表随意输入数字、字符,不管前后如何输入,只要整串字符中包含“123456”,即可完成解锁。

二、虚位密码如何实现?

1.使用已存在的函数

C语言中,存在一个名为strstr的函数,其函数原型如下,如此对两个字符串进行比对,函数strstr作用为,若子串在母串中出现,则返回母串匹配到子串开始后的所有内容。书接上回,即为匹配到正确密码“123456”后,输出其后所有内容,即“123456 *****”,我们可通过返回值判断密码是否匹配成功。

char*strstr(constchar*s1,constchar*s2){intlen2;if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误return(char*)s1;for(;*s1;++s1){if(*s1==*s2&&strncmp(s1,s2,len2)==0)return(char*)s1;}returnNULL;}

2.暴力匹配算法

此处不多做讲解,主站内很多博客都做了详细阐述:


int Bunch::Substring1(const char *s)
{const size_t subLen = this->GetSize(s);size_t subP = 0, //记录子串的位置mainP = 0;   //记录主串的位置while (mainP != this->size && subP != subLen){if (this->str[mainP] == s[subP]){++subP;++mainP;}else{mainP = mainP - subP + 1;subP = 0;}}if (subLen == subP)return mainP - subP;elsereturn -1;
}

3.KMP模式匹配算法

将所输入密码与内置密码进行数据比对,当正确时,打开门锁。此处我们不多对KMP算法进行讲解,学过数据结构的大家都知道,KMP算法时间复杂度为O(m+n),相比于以上两种实现方法,KMP算法的时间效率更高,能够节省更多的CPU资源,加速密码匹配。

基于KMP算法的虚位密码设计相关推荐

  1. 基于KMP算法的字符匹配问题

    基于KMP算法的字符匹配问题 反正整个清明都在纠结这玩意-差点我以为下个清明要给自己过了. 至于大体的理解,我就不再多说了(还要画图多麻烦鸭),我参考了以下两个博客,写的真的不错. (原创)详解KMP ...

  2. 基于Sobel算法的边沿检测设计与实现

    基于Sobel算法的边沿检测设计与实现 1. 边缘检测 2. 实战演练 2.1. matlab进行灰度图像生成 2.2. sobel_ctrl控制模块 2.3. vga显示模块 2.4. 顶层模块实例 ...

  3. 【Cordic】基于Cordic算法的NCO的设计实现

    1.软件版本 ISE14.7 2.本算法理论知识 ROM资源,作为产生离散正弦信号的另一种有效途径,CORDIC(坐标旋转数值计算)算法已越来越受到青睐.其基本思想是通过一系列逐次递减的.与运算基数相 ...

  4. js实现kmp算法_基于KMP算法JavaScript的实现方法分析

    算法的核心是部分匹配表和回退算法,部分匹配表的实现如下: function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = [ ...

  5. 数据结构 4 字符匹配-KMP算法

    第四章主要介绍的是串,但是串的实现没什么必要,最重要的知识点在于KMP算法的使用,大二时数据结构总结过一次KMP算法,大二时总结的比较细致,链接如下: https://blog.csdn.net/we ...

  6. 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案

    基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...

  7. 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)...

    郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...

  8. 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换

    实验内容及要求: 从键盘输入主串s以及子串t1和t2.编写程序,将主串s中所有t1子串替换为t2子串,输出替换后得到的串以及t1被替换的次数.要求子串查找采用改进KMP算法. 实验目的:掌握KMP算法 ...

  9. 基于sobel算法的边缘检测设计与实现

    基于sobel算法的边缘检测设计与实现 边缘是图像的基本特征.边缘检测针对的是灰度图像,目的是标识数字图像中灰度变化明显的点. 边缘检测的方法大致可以分为两类:基于查找的一类,通过寻找图像一阶导数中最 ...

最新文章

  1. 最新JAVA性能调优实战教程_java性能调优实战 - osc_9z8xc00s的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 【操作系统】RedHat7系安装显卡驱动
  3. 邵阳学院学校云认证码_湖南所有五年制大专学校
  4. 使用Docker搭建WordPress博客(三)nginx镜像制作
  5. 彻底解决_OBJC_CLASS_$_某文件名, referenced from:问题
  6. python解析xml文件elementtree_Python中使用ElementTree解析XML示例
  7. BGP——community团体属性(讲解+配置)@
  8. 如何评价一个RPC框架的性能
  9. 电信网关改造无线打印服务器,电信天翼网关路由改桥接流程
  10. 钢筋穿入女子太阳穴 消防及时破拆将其营救
  11. 对于gabor变换和gabor小波变换理解与总结
  12. B站JavaScript从入门到精通智能社Blue石川老师视频部分代码_幻灯片
  13. node.js+uniapp计算机毕业设计安卓在线民宿预定app(程序+APP+LW)
  14. 修改360浏览器模式为极速模式
  15. Python中匿名函数详解
  16. windows11+office2021安装教程
  17. DECIMAL (6,2)
  18. 7-30java实训日记
  19. “红领巾”牵手“蓝朋友”-记杭州澎博小学新201中队2019年暑期活动
  20. 足球分析大小球开发成量化交易软件

热门文章

  1. python 宏替换_宏定义与宏替换
  2. vSphere ESXI主机网络分析工具
  3. 百度李彦宏:我从未说过“百度All in AI” 更多资源还是会在搜索上
  4. android+设置字体行高,android textview设置字体的行距和字间距
  5. Video Collage for Mac,视频剪辑合成工具
  6. DatabaseMetaData类
  7. 环小音三分钟讲解黑石塔英雄模式攻略
  8. 大学平时分真的有用么?
  9. 微服务的异步通信技术RabbitMQ
  10. python安卓app开发_[实例教程] 用python开发android应用