来自随机放置的圆圈的随机字符串

Posted

技术标签:

【中文标题】来自随机放置的圆圈的随机字符串【英文标题】:Random string from randomly placed circles 【发布时间】:2014-02-11 10:15:08 【问题描述】:

我对一个我想做的项目有一个有趣的想法,但我不太确定它的数学部分。思路如下:

制作一张塑料卡片,当它靠在电容式屏幕上时模拟 9 指多点触控手势 根据“9 指”位置,确定某种唯一字符串并将其用作应用的加密/解密密钥

这样我就可以打开一个应用程序,用卡触摸屏幕,它就会获得授权。 但问题来了:

将卡片放在屏幕上的哪个位置并不重要,因为卡片会非常小以适应各种屏幕尺寸 我们可以随机放置 9 个“手指”的矩形最好是 4.5 厘米 x 3 厘米 “手指”本身只有在大约 6 毫米的圆圈时才会被识别为触摸(不确定是否可以做得更小)

我想我们可以找到左上角的“手指”,并从中获取所有其他“手指”的 X 和 Y 差异。然后将得到的数字连接成一个字符串,并将其用作解密/加密密钥。所以基本上:

key = concat(X2 - X1, Y2 - Y1, X3 - X1, Y3 - Y1, ...)

但我认为这种方法可能的组合很少(考虑到相对较小的卡片尺寸和相对较大的“手指”),并且可以轻松编写程序来生成所有可能的组合并立即破解密钥。我说得对吗?如果是这样,我该如何改进?

感谢您的意见

更新 1:实际上在 ios 上试用过。结果并不乐观,因为每次检测到“手指”的方式都不同。它们之间的距离变化很大(多达 40 像素!)。所以我想这并不像我预期的那么容易,因为对于相同的两个圆圈,操作系统似乎每次都以不同的方式检测到触摸。

【问题讨论】:

既然这听起来像是您的目标是移动设备,您是否考虑过使用内置摄像头扫描矩阵代码? 这对最终用户(我)来说太麻烦了,而且 - 这是一个有趣的项目,关键字是“有趣”:) 这只是我想尝试的东西。 【参考方案1】:

您的问题缺少一些相关信息:圆圈需要相距多远才能使系统仍然可以区分它们?您对圆心的实际期望是什么分辨率?而“6mm圆”是指6mm的直径还是半径(甚至是周长)?

由于缺乏细节,我将做一些相当粗略的近似。我首先要求将其中两个圆圈放在卡片的对角。这样,您可以通过寻找具有最大距离的一对来找到它们,并据此计算卡片的方向和大小并进行校正。这样就剩下 7 个手指随机放置。我假设分辨率为 1 毫米,并将自己限制在 45×30 毫米的区域内。这意味着每个圆有 39×24=936 个位置,总共 9367≈6,3×1020≈269 组合。好的,这不排除重叠的圆圈。但由于该卡仍然相当稀疏,这不应该太多。我想说 64 位熵(即 264 个可能的组合)应该是合理的,即使你强制执行不重叠的圆圈。如果你真的可以检测到所需分辨率的圆心,那就是。对于大多数应用程序来说,这应该是足够的安全性。比 8 个字母的密码好得多,但比通常用于的对称密钥差。 AES。

由于所有这些都在很大程度上取决于分辨率,因此可能值得首先研究该方面。通常你会得到手指位置的像素坐标,但假设你总是得到最接近圆心的像素坐标,那就太期待了。因此,您可以先编写一个小应用程序,该应用程序绘制一个 6 毫米的圆并记录它接收到的坐标。然后将一个 6mm 的人造圆圈放在那个画了很多次的圆圈里。看看记录的位置与圆心相差多远。可能在去除异常值之后,最大限度地利用这些差异。我会在其中添加一两个像素,以解决由于卡片旋转导致的舍入误差。然后将该像素数转换回公制长度。这是您可以期待的分辨率。您可能需要对多个设备执行此操作。如果您确实进行了这些实验,请告诉我您的发现,我会相应地更新我的答案。

【讨论】:

MVG,感谢您的回复。不幸的是,我还不知道圆圈应该相距多远,但它们不应该重叠甚至接触。考虑到这一点,只有第一个圆圈会有很多可能的位置,而所有其他圆圈的选择可能会少得多,对吗? @Marius:注意我更新了我的问题。后面的圈子会有更少的选择,但不会太热。您可以将所有圆圈放在一个 30×12 毫米的条带中,并留有空间。所以没有被圆圈覆盖的区域总是大于30×33mm,即使是最后一个圆圈。这就是我对 64 位或更多位的最后近似值所基于的想法。 糟糕,没有注意到您的回答发生了变化。不知何故,很难相信在这么小的区域里有这么多可能的组合,但话又说回来,我对数学一无所知,所以我就相信你对此的看法。 我也不确定您所说的圆心分辨率是什么意思。你能解释一下吗?我一有时间就会在 iOS 设备上试用它,所以我想我总是会得到像素值(甚至不确定它们是否也会比整数更精确)。而 6 毫米圆是指直径。 MvG - 感谢您对决议的解释。但是,如果我在这里错了,请纠正我 - 设备认为手指的中心真的很重要吗?如果我有一张不会改变的卡片并且“手指”没有移动或改变其形状 - 那么无论触摸屏检测到什么 - 它应该每次都检测到相同的点。如果是这样的话——只要它每次都在同一个地方,那个虚拟手指上的那个点就无关紧要了。

以上是关于来自随机放置的圆圈的随机字符串的主要内容,如果未能解决你的问题,请参考以下文章

将JMenubar添加到Borderlayout中

从 NSMutableArray 中删除随机项

d3.js 图中圆圈的随机颜色

通过按JButton在随机JPanel上绘制圆圈

如何使 ImageView 出现在圆圈内的随机位置?

java 随机圆圈背景