自如的密码锁有个问题,只要输入密码包含正确密码就能开锁 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
UserName99
V2EX    程序员

自如的密码锁有个问题,只要输入密码包含正确密码就能开锁

  •  
  •   UserName99 2024-07-25 16:10:15 +08:00 4225 次点击
    这是一个创建于 509 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这个问题存在好几年了,每次误触后还能开门就会纠结这个问题,比如正确密码是 A ,那么输入 A 、123A 、A123 、123A456 这几种都能开锁,这是个 bug 还是 feature 。然后又想到了另一个问题,他们是不是存的明文密码,如果是密文怎么判断输入密码包含正确密码的,就想到一个循环一下,每个字符后推 6 位加密后和存储的密文做对比,可能要循环很多次,还有其他什么好的算法吗?
    32 条回复    2024-07-26 15:51:15 +08:00
    mns
        1
    mns  
       2024-07-25 16:10:49 +08:00 via Android
    虚位密码。
    MJTest
        2
    MJTest  
       2024-07-25 16:11:53 +08:00   9
    是 feature.
    B1ankCat
        3
    B1ankCat  
       2024-07-25 16:13:07 +08:00   1
    这是 feature ,就是为了让你可以随便输入,包含正确密码就能进去,防止被别人偷窥到
    FabricPath
        4
    FabricPath  
       2024-07-25 16:14:58 +08:00   2
    feature ,当你背后有人站在的时候,你乱打几十个数字也能开门,但是对方不知道你真实密码是什么。
    你这个算法想的有点复杂,单片机大概率不能动态分配内存,不好处理“动态长度”的数据;简单的方式是,你每按一个数字,比如你正确的密码是 234 ,你敲 1 的话,和 4 比较,不正确;
    敲 2 ,和 2 比较,正确;
    敲 3 ,和 3 比较,正确
    敲 5 ,和 4 比较,不正确,清零。

    当中途有匹配的密码之后,开锁 flag 置位,就不会再管后面你敲了什么,按下#的时候判断开锁 flag 。
    FabricPath
        5
    FabricPath  
       2024-07-25 16:15:43 +08:00
    @FabricPath “你敲 1 的话,和 4 比较” -> "你敲 1 的话,和 2 比较"
    yanqiyu
        6
    yanqiyu  
       2024-07-25 16:17:39 +08:00   1
    判断密码就状态机(参照 kmp ),什么不用存,存一个当前识别到几位连续密码就行,数据读一个丢一个

    肯定存的是明文密码,密码锁存个明文密码没有任何困难和安全风险
    EJW
        7
    EJW  
       2024-07-25 16:18:35 +08:00
    feature ,我家新换的德施曼智能门锁也是这样。
    xubeiyou
        8
    xubeiyou  
       2024-07-25 16:21:31 +08:00
    密码锁都这样- -
    MJTest
        9
    MJTest  
       2024-07-25 16:26:00 +08:00
    @EJW 我最近也想换 德施曼感觉用的怎么样啊?尤其是耗电量 谢谢
    SimonOne
        10
    SimonOne  
       2024-07-25 16:31:16 +08:00
    这是 feature 啊,哥们,你不会突然灵光一闪吗
    shadowyue
        11
    shadowyue  
       2024-07-25 16:33:06 +08:00
    虽然知道这个是 feature ,不过我挺好奇为啥这么统一
    EJW
        12
    EJW  
       2024-07-25 16:43:29 +08:00
    @MJTest
    1. 买的 q5s ,密码和指静脉用起来没啥毛病。
    2. 如果门不符合,安装师傅现场施工,服务不错。
    3. 四月初买的,用到现在还有 65%的电。
    4. app 功能不多,但是做的还可以。wx 公众号有开门推送。
    MoYi123
        13
    MoYi123  
       2024-07-25 17:14:18 +08:00
    密码固定 6 位,输一次密码算一次 md5(password[-6:]) 不就行, 这还要什么算法吗?
    sennes
        14
    sennes  
       2024-07-25 17:33:32 +08:00
    那理论上是不是可以用 De Bruijn sequence 破解
    ISOtropy
        15
    ISOtropy  
       2024-07-25 17:41:17 +08:00 via Android   2
    我要是能输入一个π岂不是都可以破解
    icanfork
        16
    icanfork  
       2024-07-25 17:42:41 +08:00
    @shadowyue 因为可能这个是密码锁标配的基础能力/基础功能
    deplives
        17
    deplives  
       2024-07-25 17:46:11 +08:00
    老哥,所有的密码锁都支持啊,这个叫虚位密码,假定你不信任当前输入密码的环境,可以在连续正确密码前后增加任意多的字符,保证密码不被泄露
    krixaar
        18
    krixaar  
       2024-07-25 17:52:56 +08:00
    @sennes #14 可以,毕竟单纯按理论的话六位密码直接从 000000 按到 999999 就破解了……
    Inn0Vat10n
        19
    Inn0Vat10n  
       2024-07-25 17:56:55 +08:00
    @krixaar 失败多次就锁死保护了,必须重设密码
    Tsing2
        20
    Tsing2  
       2024-07-25 18:18:23 +08:00
    我猜楼主想问的是,如果使用虚位密码功能,那锁里保存的就不是密码的哈希而是密码的明文了,不然运算量有点大
    ysc3839
        21
    ysc3839  
       2024-07-25 18:21:35 +08:00 via Android
    @FabricPath 但是对方看到完整密码后输入进去也能解锁,感觉意义不大,只有在对方不能完整看到的情况下有点用,或者可能是增加容错率,避免不小心碰到别的数字再输入正确密码失败。
    0d
        22
    0d  
       2024-07-25 18:22:19 +08:00
    @tlsmars009 正常的密码锁,输入一个 pi 也可以打开
    utc76
        23
    utc76  
       2024-07-25 18:38:54 +08:00
    @Inn0Vat10n 我把每一种 6 位数字组合全部按一遍,到最后的时候才按 # 开锁,理论来说这样无论如何我都能开锁。
    jim9606
        24
    jim9606  
       2024-07-25 18:39:59 +08:00 via Android   1
    防偷窥不合理,因为只要完整重放多头多尾的密码一样可以开锁。
    省内存这个存疑,我不觉得现在有 wifi 功能的 mcu 会负担不起这点代价,可能只是单纯沿用以前弱鸡 mcu 的交互设计。
    交互上,多数密码锁没有清空输入按键也没屏幕提示位数,支持这种输入可以免去对这两者的需求(故意输错虽然可以但会累计错误次数,不能等同于清空输入)
    mcfog
        25
    mcfog  
       2024-07-25 19:02:36 +08:00
    多按几位还有一个好处是避免长期使用以后,密码的那几个按键痕迹/磨损到有肉眼可见的差异
    Ruikoto
        26
    Ruikoto  
       2024-07-25 19:21:58 +08:00
    @jim9606 这个防偷窥是防你输了 6 位被直接记下来的,如果你输入 20 位的虚位密码还被人偷窥走了,那还是用指纹吧
    CSGO
        27
    CSGO  
       2024-07-25 20:36:05 +08:00 via Android
    这个挺好,
    churchmice
        28
    churchmice  
       2024-07-25 23:56:54 +08:00
    你只要密码长度的是固定的,里面存 hash 也是没有问题的
    输入的数据存在一个 buffer 里面,用个滑窗挨个算 hash 就行,计算量也不大
    但是现实的问题是大家都偷懒不会这么做,我见过太多做安全的应用,号称多么安全,最后把钥匙挂门上的设计
    安全这东西最重要的是安全意识,可惜大多数人没有
    反过来你如果有安全意识,你的设计成本会增加,反而会被劣币驱逐,乳汁奈何
    SimonOne
        29
    SimonOne  
       2024-07-26 01:14:21 +08:00
    @jim9606 #24 记住 6 位密码和记住 20 位密码的难度是不一样的,我只要确保胡按的里面夹上正确的就行,偷窥记密码的人可没那么轻松了。
    JustBecause
        30
    JustBecause  
       2024-07-26 09:31:21 +08:00
    @ysc3839 多加几位就好了,我当着面输 20 位密码,看得人也记不住啊,实在不行我输 30 位 40 位
    Ainokiseki
        31
    Ainokiseki  
       2024-07-26 11:20:15 +08:00
    @FabricPath 如果是这样的话,假设正确密码是 2324 ,输入“232324”会无法判断通过的
    grady8866
        32
    grady8866  
       2024-07-26 15:51:15 +08:00
    @meisa 锁体有限制虚位密码长度啊,像米家的就是最长 20 位,不可能没完没了让人输入的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3785 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 05:15 PVG 13:15 LAX 21:15 JFK 00:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86