基于KMP算法的虚位密码设计
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、虚位密码是什么?
- 二、虚位密码如何实现?
- 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算法的虚位密码设计相关推荐
- 基于KMP算法的字符匹配问题
基于KMP算法的字符匹配问题 反正整个清明都在纠结这玩意-差点我以为下个清明要给自己过了. 至于大体的理解,我就不再多说了(还要画图多麻烦鸭),我参考了以下两个博客,写的真的不错. (原创)详解KMP ...
- 基于Sobel算法的边沿检测设计与实现
基于Sobel算法的边沿检测设计与实现 1. 边缘检测 2. 实战演练 2.1. matlab进行灰度图像生成 2.2. sobel_ctrl控制模块 2.3. vga显示模块 2.4. 顶层模块实例 ...
- 【Cordic】基于Cordic算法的NCO的设计实现
1.软件版本 ISE14.7 2.本算法理论知识 ROM资源,作为产生离散正弦信号的另一种有效途径,CORDIC(坐标旋转数值计算)算法已越来越受到青睐.其基本思想是通过一系列逐次递减的.与运算基数相 ...
- js实现kmp算法_基于KMP算法JavaScript的实现方法分析
算法的核心是部分匹配表和回退算法,部分匹配表的实现如下: function kmpGetStrPartMatchValue(str) { var prefix = []; var suffix = [ ...
- 数据结构 4 字符匹配-KMP算法
第四章主要介绍的是串,但是串的实现没什么必要,最重要的知识点在于KMP算法的使用,大二时数据结构总结过一次KMP算法,大二时总结的比较细致,链接如下: https://blog.csdn.net/we ...
- 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案
基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...
- 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)...
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
实验内容及要求: 从键盘输入主串s以及子串t1和t2.编写程序,将主串s中所有t1子串替换为t2子串,输出替换后得到的串以及t1被替换的次数.要求子串查找采用改进KMP算法. 实验目的:掌握KMP算法 ...
- 基于sobel算法的边缘检测设计与实现
基于sobel算法的边缘检测设计与实现 边缘是图像的基本特征.边缘检测针对的是灰度图像,目的是标识数字图像中灰度变化明显的点. 边缘检测的方法大致可以分为两类:基于查找的一类,通过寻找图像一阶导数中最 ...
最新文章
- 最新JAVA性能调优实战教程_java性能调优实战 - osc_9z8xc00s的个人空间 - OSCHINA - 中文开源技术交流社区...
- 【操作系统】RedHat7系安装显卡驱动
- 邵阳学院学校云认证码_湖南所有五年制大专学校
- 使用Docker搭建WordPress博客(三)nginx镜像制作
- 彻底解决_OBJC_CLASS_$_某文件名, referenced from:问题
- python解析xml文件elementtree_Python中使用ElementTree解析XML示例
- BGP——community团体属性(讲解+配置)@
- 如何评价一个RPC框架的性能
- 电信网关改造无线打印服务器,电信天翼网关路由改桥接流程
- 钢筋穿入女子太阳穴 消防及时破拆将其营救
- 对于gabor变换和gabor小波变换理解与总结
- B站JavaScript从入门到精通智能社Blue石川老师视频部分代码_幻灯片
- node.js+uniapp计算机毕业设计安卓在线民宿预定app(程序+APP+LW)
- 修改360浏览器模式为极速模式
- Python中匿名函数详解
- windows11+office2021安装教程
- DECIMAL (6,2)
- 7-30java实训日记
- “红领巾”牵手“蓝朋友”-记杭州澎博小学新201中队2019年暑期活动
- 足球分析大小球开发成量化交易软件
热门文章
- python 宏替换_宏定义与宏替换
- vSphere ESXI主机网络分析工具
- 百度李彦宏:我从未说过“百度All in AI” 更多资源还是会在搜索上
- android+设置字体行高,android textview设置字体的行距和字间距
- Video Collage for Mac,视频剪辑合成工具
- DatabaseMetaData类
- 环小音三分钟讲解黑石塔英雄模式攻略
- 大学平时分真的有用么?
- 微服务的异步通信技术RabbitMQ
- python安卓app开发_[实例教程] 用python开发android应用