我正在编写一个小程序来帮助拆分密码(有关解释,请参见下文)

我有将文本转换为 int 的代码(text-ascii binary -> dec int)

所以在这种情况下,“测试”这个词将 = 1952805748

现在是有趣的部分。(编码密码)

然后我会取 x1 = 1952805748 和 y1 = 0

然后我组成一个随机点,其中 x2 = 7 和 y2 = 142

这将在 x1,y1 和 x2,y2 之间画一条线(使用 Y=mx+B)

我需要如何沿这两个点创建的线找到任何随机点(也称 x3,y3)

如果有人有任何想法,我很乐意听取他们的意见。我试图计算出两个点都是整数的代码(如果每个数字后面没有大的小数点,对每个人来说都更容易)

++ 为什么++

一般的想法是,如果您必须在两方之间拆分密码,则一方可能会根据给定的字符串找出密码

如果你使用这种方法,他们会得到一个点,从那个点开始,在数学上不可能确定线与 x (x=?y =0) 的交点
这样您就可以放心地将一套要点交给您的律师,再将一份要点交给您的妻子

他们会进行数学运算(将其输入到程序中)然后他们会得到一个数字,该数字将被解码为一个密码,该密码可以根据您的意愿解密文件或其他一些您不希望他们在没有其他人的情况下访问的敏感文件在场

最佳答案

这个算法实际上被称为“Shamir's Secret Sharing”,是一种非常好的分割 secret 的方法。您可以拆分任意大的 secret ,这需要您想聚集多少人才能恢复 secret 。

我建议您稍微概括一下,然后寻找一个解决方案,让您指定需要 N 个点来求解 N-1 次多项式。您可以使用 Lagrange Polynomials 为您解决这个问题。

然而,维基百科的伪代码只适用于浮点数,需要稍微修改以用于整数。 Check out my full python implementation 如果你想要一些想法(并假设它有帮助)。

它给了我这个输出:

1 -- 50383220533284199945706810754936311181214547134666382315016772033813961148457676
2 -- 125723425896904546349739165166331731432281836699962161072279259011758052396215820
3 -- 235794378436564714387676526976517945151880763730707233042654663244625708155520494
'This is my super secret password.'

编辑: 一年后,我更新了实现以在有限域中工作,这是可证明安全所必需的。万岁!

关于c# - 沿线查找随机点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/597788/

10-11 02:11