使用具有模糊容差算法的笔划作为加密密钥

And*_*ita 12 .net c# language-agnostic encryption fuzzy-comparison

如何使用模糊容差加密/解密?

我希望能够在InkCanvas上使用Stroke作为加密的关键,但是当再次解密时,用户不必绘制完全相同的符号,只是类似.这可以在.NET C#中完成吗?

---更新(9 sep)---

我理想的是一种加密算法,它可以接受基于某些基本密钥和定义允许差异的函数的特定密钥范围内的任何密钥.

我在本地进行所有加密/解密,所以我不需要安全地通过电线发送任何东西.我不想存储用于加密的密钥,所以我没有什么可比的.我可以想出一些方法为每个相似的笔画生成相同的键,但如果想要接受任何类型的符号(不仅仅是字母),这并不容易.另一种选择是,如果加密密钥可以通过设计以某种方式接受类似的密钥,我不知道它是否可能......?

Ali*_*tad 2

好的。让我们把你的问题分成两部分。

1) 模糊 2) 加密

事实上,这两个概念都相对较老,而且它们的实施已经存在多年了。每个都很好地处理了手头的问题,但这并不意味着将两者结合起来是一个好主意。我相信您的解决方案必须采用两阶段方法。

首先,现有的加密标准在使用单一精确密钥保护数据方面非常有效。根据您的情况,您需要对称加密算法,例如 AES 或 Rijndael。

解决方案的模糊部分也不是那么难。与任何其他模糊识别技术一样,您需要进行特征提取并创建要传递给加密算法的向量。您需要在您的功能中建立模糊性。例如,笔画的数量、每个笔画的起始点的象限、每个笔画的弯曲系数等。这足以构建一个 32 位向量来传递给加密算法。

更新

我将尝试使其更具说明性:

2 位表示笔划数:1、2、3、+3(转换为 00、01、10 和 11)

第一个笔划开始的象限的 2 位:TopLeft、TopRight、BottomLeft、BottomRightt 编码为 00、01、10 和 11

第一个笔画末端象限的 2 位:同上

2 位用于第二笔画开始的象限:同上。如果没有第二笔则 00。

第二笔画末端象限的 2 位:同上。如果没有第二笔则 00。

2 位用于第三笔画开始的象限:同上。如果没有第三笔则 00。

第二笔画末端象限的 2 位:同上。如果没有第三笔则 00。

第一个笔划的曲线度的 2 位:直 ->00 ... 漂亮的圆 ->11。这不会很容易,您可能会将弯曲度减少到 2,并只使用一点,但这是“吮吸看看”。

所以这是 16 位。您现在可以将其余部分保留为零,然后尝试看看它是如何工作的。

希望这可以帮助。