醉酒主教算法

2021-08-07 01:10:42

我家有一个传统,每个人都轮流在一年一度的圣诞布丁中表达一个秘密的愿望。重要的是,愿望对许愿者来说是保密的,否则布丁魔法将不起作用,所以自从搬到美国后,我实施了一种散列我的愿望的新方法,这样它就可以通过短信搅拌,而搅拌器不知道愿望。布丁秘法专家向我保证,布丁魔法可以反转任何散列函数来恢复最初的愿望。去年,我从 OpenSSH 随机艺术中获得灵感,该艺术使人们能够比通过比较简单的十六进制字符串更可靠地查看两个密钥是否相同。 +-----[第一]-----+ +-----[第二]----+| .=o。 . | | ..=o 。 || . *+*。 ○ | | o 0+.. o || =.*..o | | Xo|| o + .. | | . * . . ||所以。 | |所以 。 ||哦。 | |哦。 || . . . | | . ..||哦。| | .o|| E.| | Eo|+-----------------+ +-----------------+ 试图找出十六进制代码的差异是很难,但你的大脑真的很擅长注意到 ASCII 艺术是不同的。我真的很喜欢生成的图像的通风感,所以我想我会深入研究它们是如何制作的。我几乎没有在线研究表明 OpenSSH 使用了一种由 Alexander von Gernler 设计的名为“The Drunken Bishop”的算法。然后,我找到了 Dirk Loss、Tobias Limmer 和 Alexander von Gernler 撰写的出色分析和文章,其中清楚地描述了该过程及其一些更精细的特征。我期待粗糙的密码学,但令我宽慰的是,算法真的很简单,并且巧妙地总结了一个有点奇怪的短篇小说:

彼得主教发现自己在一个环境中庭的中间。四面都有墙,显然没有出口。地板铺有方砖,严格地黑白交替。他的头很痛——可能是因为他之前喝了太多酒——他开始随意地四处游荡。嗯,准确的说,他只走对角线——就像棋盘上的主教一样。当他撞到一堵墙时,他会移动到一边,这会将他从黑色瓷砖带到白色瓷砖(反之亦然)。每次移动后,他都会在地板上放一枚硬币,以记住他以前去过那里。走了64步,就在没有硬币的时候,彼得突然醒了过来。多么奇怪的梦啊! Dirk Loss、Tobias Limmer 和 Alexander von Gernler – 醉酒主教:OpenSSH 指纹可视化算法的分析 总结:我们创建了一个棋盘(OpenSSH 为 17 x 9)并将我们的“主教”放在中心,将其标记为开始。然后我们将输入分解为定义 4 种可能移动的位对:{00:左上(↖),01:右上(↗),10:左下(↙),11:右下(↘ )} 对于输入中的每一对位,我们将象棋在棋盘上移动一个空间,并增加一个计数器,记录我们访问每个方块的次数。主教不是在边缘移离板,而是沿着侧面滑动,就好像它们是墙壁一样。例如,如果象在棋盘的右边缘并且下一步是 01,我们只需将象垂直向上滑动一个空格,像往常一样增加新方格上的计数器。以这种方式沿着墙壁滑动可以让象棋棋盘上的方块从黑色变为白色。在执行输入位指定的所有步骤后,我们标记最终位置。最后,通过根据访问次数为板上的每个位置分配一个符号来简单地绘制板。 OpenSSH 使用这些选择来反映“一行越来越粗的 ASCII 字符”的符号:[' ', '.', 'o', '+', '=', '*', 'B', '0', ' X', '@', '%', '&', '#', '/', '^']

描述没有定义如果计数器 >13 应该做什么,所以我选择环绕,这在实践中似乎不太可能发生。这就是 ASCII 的真正含义。但是我无法抗拒将 HTML <canvas> 取出并播放更多...与其将棋盘状态绘制为字符串,我们还可以利用画布的完整矢量图形功能做更多的事情。我首先划分绘图区域,为主教板上的每个方块指定一个不同的位置。当板的宽度大于高度以考虑等宽字体的非方形特性时,ASCII 版本效果最佳。在画布上制作方形网格似乎更自然,但没有要求。更大的网格会导致更长的路径和更斜的格子感觉,因为这个象不太频繁地滑到其他颜色方块上。较小的董事会感觉更忙。 17 x 17 尺寸似乎效果很好。然后我决定非常简单地遵循主教所采取的路径,在每个访问点画一个圆,其半径等于该点被访问的次数。按照创建顺序的路径会导致后面的点出现在前面的点之上。用简单的颜色循环填充圆圈效果很好,我很快就得到了令人满意的结果。我很快发现,直接从输入字符串中拉出位对会导致向上和向右移动,从而导致图像不平衡。这样做的输入消息和输出图像之间有很好的联系,但结果在视觉上并不吸引人。首先使用 SHA-3 对输入进行哈希处理为我们提供了一个固定长度的输入,可以很好地探索整个空间。我留下了散列或不向用户开放的选项。我相信这个简单的想法可以做更多的事情。扩展到三个维度或动画它浮现在脑海中。在明年的布丁愿望需要发送之前,我们将看到会发生什么……