【UEFI】---BIOS中UserPassword的重复校验总结

摘要:
随后的代码实现也将由于不适当的代码框架而完全崩溃。)2.代码需要良好的封装。以作者目前遇到的一个小问题——“UserPassWord可以在BIOSSetup下成功地重复设置密码的功能”为例。1.过程梳理a.密码的存储和验证通常使用HASH值验证方法。首先,验证密码的复杂性。第二步是将当前输入的密码与先前存储的密码进行比较。

  UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可。而其中很多编程所采用的思想确实值得学习。今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考。
先列干货,具体的小结后续补充:
  1. 明确你要的某个功能的实现逻辑,都需要在哪个位置添加代码。
     (很重要,这决定着你的方案是否可行重要前提,一旦此步骤错误,后续的代码实现也会由于代码框架的不合适而完全崩塌)
  2. 代码需要良好的封装性,高内聚性,低耦合性。秉着此原则。笔者建议写代码时从最终功能开始写起,用到什么变量,GUID,或者头文件定义,就去添加什么。这样能保证你添加的都是你需要的,且思路不会乱。
  3. UEFI框架下经常会涉及到一些GUID,包括跨Pkg的Lib调用,在此也会小结一下。

  OK, 干货就这几点,用笔者目前遇到的一个小问题--"BIOS Setup下UserPassWord重复设置密码可以成功的功能"为例进行说明。

1. 流程梳理

    a. 密码的存储和校验一般多采用HASH值校验的方式,优点【安全,简单】
    b. BIOS下的密码流程:

                          【UEFI】---BIOS中UserPassword的重复校验总结第1张

  •  用户输入密码后,BIOS能拿到用户输入的字符串,首先需要对密码的复杂度进行验证。看复杂度是否符合。

           【UEFI】---BIOS中UserPassword的重复校验总结第2张

  •  其次是将当前输入密码与之前的存储过的密码进行对比,若有重复则放弃。密码的存储的和对比一般是使用该字符串的Hash值,非明文存储简单安全。若符合要求,则进一步将密码进行存储         

    (CRB代码中提供了对AdminPassword的过往三次密码重复校验,其实现的流程比较复杂一些,但是其原理应该是通过对过去三次设置的密码进行Hash值存储校验,且需要按照顺序存储,毕竟只能存储过去的三次。这个地方应该使用了类似队列的方案,先进先出)

               【UEFI】---BIOS中UserPassword的重复校验总结第3张

  • 最后就是在每次存储密码的时候,要把最终保存的Admin的密码的Hash存储到队列里面。原始最早存储的那个密码进行删除,将其后的两个密码Hash按顺序提升一位,然后将最新保存的密码放置在Hash队列中的第三位即可

2. 方案设计

  2.1  在最终保存密码的时候,设置一个Variable存储当前UserPassword的Hash

   2.2  在输入UserPassword后,读取上一次设置的密码Hash,与当前输入的密码Hash进行对比。判断是否可以被写入

3. 编码实现

  3.1 设置保存UserPassword的Hash值,我们仅需要拿到当前输入密码的字符串,然后得到Sha256编值,再通过gRT->SetVariable的服务存储保存即可。初步编写的函数如下:    

              【UEFI】---BIOS中UserPassword的重复校验总结第4张

  3.2 用户输入密码后,在做完复杂度校验后,添加UserPassWord的重复验证,代码如下:   

            【UEFI】---BIOS中UserPassword的重复校验总结第5张

   3.3 最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置即可。

           【UEFI】---BIOS中UserPassword的重复校验总结第6张

小结梳理:

  最终将SetVariable的函数添加至BIOS保存退出时,设置密码的位置即可。
  此Bug梳理之后其实挺简单的,回想自己的解问题思路,应该注意的几个点主要如下:
    a. 理清处原有的AdminPassword的检验机制,学习其的一些处理方法
    b. 编码时,对GUID和一些Lib库的调用有点不够清晰,也是通过本次整理重新梳理了下GUID的用法和Lib库的调用。(后续着重总结)
    c. 有一些过程功能函数,仅限在某个.c文件内部使用,这种情况下,果断考虑重写一套函数供自己使用。不要为了外部调用原有函数而花费过多无用的时间。
    d. 最最重要的一点,写代码时一定要明确需求,自己要写什么,在哪个地方写?然后从最根本的需求处入手,需要什么就添加什么,这样才能稳住阵脚,从容应对。

  针对此次解决的一些小Bug,做以上总结,给同为程序猿的我们,留下些许的足迹。

  一个普通程序员的成长路程,欢迎关注我的公众号,茫茫人海,能与你相遇既是有缘。哈哈

            【UEFI】---BIOS中UserPassword的重复校验总结第7张

免责声明:文章转载自《【UEFI】---BIOS中UserPassword的重复校验总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Postman]授权(11)【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java学习手记:推荐编辑器UltraEdit及其配置

 如果不是进行大型的项目开发,只是自己初步学习java,而其中不免要编写测试书上的好多程序,这时我们不用下载安装像Eclipse、JBuilder这些庞大的集成开发环境(IDE)。在这里向大家推荐一款小巧的文本编辑工具UltraEdit。           UltraEdit 是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取...

使用vscode快速建立vue模板

当我们希望每次新建.vue文件后,vscode能够根据配置,自动生成我们想要的内容。 打开vscode编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索框,我们输入vue,将代码ctrl+c 到vue-html.json { "Print to console": { "prefix": "vue",...

工具篇01-代码扫描工具Gamma

1. Gamma简介 Gamma是由Acellere开发的智能软件分析平台。 它通过加快代码审查,支持开发人员和团队在更短的时间内构建更高质量的软件。 它会自动对代码中的热点进行优先级排序,并提供清晰的可视化效果。 凭借其多向量诊断技术,它可以分析多个镜头的软件,包括软件设计,使公司能够透明地管理和改进其软件质量。 2. Gamma使用教程 1)注册账号...

Oracle Sql 胡乱记

/Oracle查询优化改写/ --1、coalesce 返回多个值中,第一个不为空的值 select coalesce('', '', 's') from dual; --2、order by -----dbms_random.value 生产随机数,利用随机数对查询结果进行随机排序 select * from emp order by dbms_rand...

Java日志框架总结

1. 前言   从写代码开始,就陆陆续续接触到了许多日志框架,较常用的属于LOG4J,LogBack等。每次自己写项目时,就copy前人的代码或网上的demo。配置log4j.properties或者logback.properties就能搞定。这种思想一直持续到最近,前几天写了一个小demo,放在liunx上跑的时候竟然报stackOverFlow异常,...

frameset框架弹出层

     前段时间做项目,有个功能是消息提醒。 我相信很多大牛都做过。下面来分享我遇到的问题和解决方案。      首先我们的项目是用frameset框架,main代码。 <frameset name="myFrame" cols="85,*" frameborder="no" border="0" framespacing="0">...