lock-on-blue-gate

几周前,我写了一篇关于如何使用 De Bruijn 序列攻击没有”输入”键的锁,即一旦输入正确的符号,锁就会打开。

以下是这个主题的变体:一次按下多个按钮的锁怎么样?[1]

你可以把它当作一个带有更多按钮的键盘。例如,假设您可以一次按一个或两个按钮,上面所示的锁。然后,您可以将此视为包含 15 个按钮的锁:5 个实际按钮和 10 个虚拟按钮,对应于从 5 个按钮中选择 2 个按钮同时按下的 10 种方法。

您可能还喜欢:一个挑战与10个解决方案。

也许锁可以让你一次按下更多的按钮。我不认为我曾经使用的组合,需要两个以上按钮一次,但原则上,你可以按下最多五个按钮一次在上面的照片,共31个可能的按钮组合。而且,由于 31 是质数,因此可以使用 生成相应的 De Bruijn 序列。

如果您知道密码的长度,您可以尝试 De Bruijn 序列来输入该长度的密码。但是,如果您事先不知道密码的长度,该怎么办?您可以尝试 De Bruijn 序列,以获得长度为 1、长度 2、长度为 3 等的密码。但是,是否有更有效的方法呢?

如果有k按钮组合,并且密码的长度为n,则最佳解决方案是开始输入 De Bruijn 序列B(kn),直到锁打开。如果您知道密码的长度不超过 4,则可以尝试Bk,4) 序列,如果密码实际上短于 4,例如长度 3,您仍然会打开它。

但是,如果你已经尝试了一个Bk,4) 序列, 事实证明密码的长度 5?你可以做的比重新开始一个B(k,5)序列更好,因为B(k,5)序列中的某些子字符串已经尝试过。但是你怎么能系统地做到这一点呢?如果你不知道密码的长度,你怎么能比尝试B(k,1),然后B(k,2),然后B(k,3)等做得更好呢?

[1] 对于这篇文章,我假设一旦您输入正确的按钮序列,锁就会打开。例如,如果密码为 345,而您输入 12345,锁将打开。我不知道这些锁是否这样工作。也许你必须转动句柄,这将有效地充当输入键。但是,也许有一种方法来听锁,这样你就可以知道什么时候输入了组合之前,你扭曲手柄。

更新:根据一些反馈,照片中的锁只允许每个按钮使用一次。这严重限制了可能的组合数量,这里概述的方法将没有必要。但是,该帖子提出了更一般性的问题,这些问题可能在另一种设置中有用2;颜色: rgb (34, 38, 53);边距:20px 0px 5px;字体大小:30px;明确:两者均;字母间距: -0.5px;字体样式:正常;字体变异连字:正常;字体-变量-大写:正常;孤儿: 2;文本对齐:开始;文本缩进: 0px;文本转换:无;空白:正常;寡妇: 2;字间距: 0px;-webkit-文本-描边宽度:0px;背景色: rgb (255, 255, 255);文字装饰风格:首字母;文本装饰颜色:首字母;”*进一步阅读

Comments are closed.