我正在通过实施research paper来处理C#中的项目。现在我遇到了问题,我发送了一封带有此图片的邮件给作者,但没有人回复
任何建议的摘要算法来计算阈值?
并且难以理解研究论文的映射功能。
Research paper 2我认为两者都是相同的,只是稍微改变一下......
答案 0 :(得分:1)
这是一个令人遗憾的情况。两篇论文都缺乏清晰度和所有相关信息,无法完全复制这一过程。旧文件甚至承认(第4节,第IX步)。
无论如何,我们可以自己做一些澄清和侦探工作。
T
在C
之前计算。C
计算T
没有歧义。阈值算法中的 C 很可能是Ch
的拼写错误。在最近的论文中,第二部分中的步骤1表示阈值计算取决于消息中的字符数。此外,在较旧的论文中,他们将字符数分配给 C 。考虑到两篇论文之间的复制量,如果他们忘记将 C 更改为Ch
,那就不足为奇了。不幸的是,他们没有提供计算因子的算法(感兴趣的论文中的阈值),但是我们可以假设他们至少把它写在未发表的地方,他们为新论文复制了以描述阈值算法。 / p>
说到X
,你运气不好。我在论文的任何地方都没有找到它的其他参考,并且考虑了阈值函数的所有输入(Ch:字符总数,PL:密码,PM:密钥)。这让我猜测......如果...... X
是 C 的错字,因为它们在键盘上彼此相邻?这也与返回值不大于9的算法一致。除了怀疑所有mod 9操作始终乱丢,旧论文明确地这样说(第4节,第IX步):
通常 factor 值在2到9的范围内,因为实际实验表明,在此值之上,块映射函数所用的时间过长,输出值超出范围。
总的来说,我推测正确的算法是这样的:
T = Ch % 9
T = T + PL
T = T % 9
T = T + [(9-Ch)((PL-PM)/PL)
然而,最后一点是有道理的。 (PL-PM)/PL
可以返回一个浮点数。如果你使用整数除法或floor函数(两者都是等价的),算法几乎与给出介于2和9之间的值一致。实际上,我得到0到8之间的值,但是你可以将它们移位一个得到范围1-9。
如果所有其他方法都失败了,我是否可以建议您在其可接受范围内随机生成T
的值?只要该值的生成不会造成算法的任何内部不一致,即,T
必须按照本文所述进行计算,否则稍后的某些步骤将无法正常运行,你应该没事。
关于Bi
的映射函数,等式7使得函数绝对清楚。与示例(第47页)的步骤10中描述的形式的不一致源于在文章中途的拼写错误和重新定义的变量。明确地说,F是T
的拼写错误,并且u与C
相同,这是单位的大小。由于某些愚蠢的原因(可能是因为它在旧论文中被定义为如此),他们在示例的第3步中使用了u而不是C
。对于i的幂,或者Math.Pow(T,i) * Math.Pow(C,i)
,它是I乘以C的幂。
如果我现在可以表达我的意见,那么他们定义映射功能的方式并不令我信服。他们说,函数的特征必须是生成的数字必须介于1和B之间,其中B是高度和宽度分割后图像中的块数。他们还说不会发生碰撞,或者你最终会嵌入同一个块两次,因此会覆盖以前隐藏的信息。这些特征是合法且必要的,但是它们的实施和最佳效果的论证是值得怀疑的。无需重新发明轮子,尤其是随机数生成功能,因为您不能保证彻底调查它确实满足您的要求。
我只想生成一个数字1,2,3,...,B的列表,然后将其洗牌。它保证没有数量超过限制,没有碰撞,你也保证一个良好的随机顺序。最流行的改组算法是Fisher-Yates。 Here是C#中的一个实现。为了确保嵌入和提取过程生成相同的随机顺序,您可以使用相同的种子初始化PRNG,在这种情况下,种子可以是双方共享的密码。由于种子必须是整数且密码是字符串,因此只需hash。