【发布时间】:2016-06-15 14:36:10
【问题描述】:
给定 A 中的输入二进制数列表和 B 中的输出二进制数列表,为所有 X 寻找一个满足位与的值。即 A 和 X = B 其中 A 有 6 个设置位,B 有 0 到 6 个设置位,X 有 12 个设置位。 A、B 和 X 中的所有数字都是 128 位长。
与这个问题类似:Most efficient method of generating a random number with a fixed number of bits set 但我还需要该随机数来在与一组已知二进制数进行按位运算时产生已知的二进制结果。
一个天真的想法: 生成一个 12 位设置的随机 128 位数字 X,然后针对 A 中的所有数字对其进行测试,看看它是否生成了 B。如果没有,则将X 中的位,然后重试。
我知道一定有更好的算法。
澄清:B 与 A 相同,只是 A 中设置的部分或全部位 (1) 现在已在 B 中随机设置为 0。
更新我的幼稚想法:
我刚刚发现,只要 A 中的某个位为 1,相应的位 X 将等于 B 中的相应位,因为 1 AND xBit = bBit。 当 A 中的位为 0 时,xBit 是未知的(0 或 1)。所以对于每个 A 中的数字,我可以得到由 1、0 和未知 y 组成的字符串 X。 例如yy00011y10010y10... 然后我可以将所有这些字符串 X 与 彼此并通过将 y 替换为 1s 来找到独特 X 的“适合” 和 0。我不确定这是否是最好的方法,但它可能是 比猜测和检查更好。对此有什么想法,或者如何找到合适的?谢谢
【问题讨论】:
-
嗨@MarcB 这不是作业问题。我正在从事一个涉及一些按位加密/安全模块的项目,这是一个让我卡住的较小组件。我的编程问题是,对于这类事情,是否存在任何类型的算法。如果您可以向我推荐任何类似的东西,我也愿意阅读学术论文。
-
这是不可能的,除非 A 和 B 已被特别选择以使其成为可能。这是因为
AND操作是严格还原的。考虑A = {'01'}和B = {'10'}。不存在 no X 这样的(A and X) = B,不管你让它有多少位。 -
XOR当然可能是可能的,但我怀疑一般情况下。 -
感谢@RBarryYoung 的有用评论。在我的项目中,A 和 B 是 128 位数字,随机设置位(B 可能没有设置位,或最多 6 个设置位。A 总是有 6 个)。我需要找出我们的密钥 X 中的哪些位与输入相同,这就是我使用 AND 的原因。不确定 XOR 在这里是否有效,但我可以考虑其他可能解决问题的按位运算。
-
@RBarryYoung 再次阅读您的评论,我应该澄清一下。 B实际上是A,但是A中的一些设置位现在被随机设置为0,而一些设置位未被触及(这就是为什么B有0到6个设置位,而A有所有6个设置)。所以你的例子是
A = {'01'}和B = {'00'},如果我们需要在X中设置一个1位,我们有X = {'10'}
标签: algorithm optimization random binary bit-manipulation