[STM32F4]

STM32粉丝嘉年华demo抢先看之---鉴权系统

[复制链接]
576|0
手机看帖
扫描二维码
随时随地手机跟帖
巧克力娃娃|  楼主 | 2017-4-19 13:42 | 显示全部楼层 |阅读模式
诸位小伙伴们大家好~在即将到来的STM32粉丝嘉年华上,我们准备了demo展示的环节,我们将会展示共计4个优秀demo。
这一篇先给大家来介绍 鉴权系统
先看操作视频:

鉴权(authentication)是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。由于一台设备工作的时候需要很多参数,有些是用户设定的。而有些是厂家设定的且不适宜让用户改变。便有了后台参数。由于通过封堵后台参数入口的方式防止修改后台参数的方法安全性过低。尤其是对于本测试平台所使用的迪文屏幕。很容易通过抓取串口上的数据绕过密码进入后台。所以设计了当前的鉴权系统。通过对传入参数与当前权限等级的匹配鉴别当前用户的权限。大大加强系统的安全性。

系统框图:
                              
1.jpg
2.jpg
3.jpg
系统框图:
                              
硬件平台:
1.Nucleo-F413ZH st的官方开发板。
2.DGUS电阻触摸屏;

接下来介绍一下硬件平台:1.Nucleo-F413ZH st的官方开发板。2.DGUS电阻触摸屏;
1、Nucleo-F413板子不用多说,大家都很熟悉了。
2、DGUS电阻触摸屏,(不是打广告,只是刚好有一个)是迪文公司开发的串口屏,可选RS232电平,或是ttl电平。
DGUS的数据传递是依靠地址的。写对应的地址修改相应的显示变量。没用的坛友把地址当成寄存器就行,一个地址可以对应一个或多个屏幕上的值。同样,在屏幕上输入的值也是以地址判断来自哪个元素。这样一来就可以将地址分为多组,每组地址对应一个权限等级。当当先权限等级低于所需的权限等级的时候,跳转到密码输入界面,等待用户输入密码以提升权限。
3、密码验证方式可定制。可以选用固定密码,可修改密码。或是动态密码。为了验证方便,我使用了固定密码。
下面介绍一下Demo:
测试页面分为5页,欢迎页面,主页面,Level1参数,Level2参数,Level3参数。
  Addr<=0x0010  //权限控制
  Addr>=0x0010)&&(Addr<=0x00FF        //Main Page;
  Addr>=0x0100)&&(Addr<=0x0200        //Param level 1;
  Addr>=0x0200)&&(Addr<=0x0300        //Param level 2;
  Addr>=0x0300)&&(Addr<=0x0400        //Param level 3
根据地址的不同将数据散装到相应的子程序中进行处理。
具体的处理过程:
1.   void guiLevel1Exec(uint8_t execSig)
2.   {
3.                   int16_t data =(execPkg.Data[0]<<8)+execPkg.Data[1];
4.                  int32_t uldata =(execPkg.Data[0]<<24)+(execPkg.Data[1]<<16)+(execPkg.Data[2]<<8)+(execPkg.Data[3]);
5.                  if(AccCheck(1)){
6.                          AccSetOrigPage(GuiLevel1Page);
7.                          DGUS_SwiPage(GuiAccessPage);
8.                  }
9.                  switch(execPkg.Addr)
在每个子程序的入口都有AccCheck()检验权限。参数为所需要的权限等级。如果权限等级不够高,则跳转到密码输入界面。
1.   int8_t AccLevelInc(uint32_t SecNum)
2.   {
3.           switch(AccHanler.AimAccLevel)
4.           {
5.                  case 1:
6.                          if(SecNum==121){                              //改等级权限所需的密码
7.                                 AccHanler.CurAccLevel=1;
8.                          }
9.                          break;
10.                case 2:
11.                        if(SecNum==122){
12.                               AccHanler.CurAccLevel=2;
13.                        }
14.                        break;
15.                case 3:
16.                        if(SecNum==123){
17.                               AccHanler.CurAccLevel=2;
18.                        }
19.                        break;
20.                default:
21.                        break;
22.         }
23.         
24.        DGUS_SwiPage(AccHanler.OrigPage);
25.         returnAccHanler.CurAccLevel;
26. }
这是检验密码是否正确的相关代码。如果正确,则提升到相应的权限。错误处理机制根据实际形况自行添加。

有些较为复杂的控制系统往往分为前台、后台。进入后台需要输入密码,但是以往的固定秘密不安全,即使密码能够修改依然不安全;所以试图建立一个使用动态密码的权限管理框架。用于实现后台登录,权限管理。该系统对比要写入资料的权限和当前系统权限做对比,如果权限不足则进入提权操作;
产生一个随机序列号,输入相应密码便可以提升权限。
每个序列号可对应多个不同安全等级的密码,等级越高的密码加密方式也更复杂。
鉴权系统根据输入的密码进行提升到相应的权限。

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

本版积分规则

个人签名:送板子~ 借板子~ 玩板子 评板子~

171

主题

1228

帖子

23

粉丝