1

我只是在学习 c,我正在尝试从算法中实现一个 for 循环。我对如何实现它感到非常困惑,请参阅下面的尝试。任何帮助或想法将不胜感激,这意味着循环中的循环依赖于十六进制值。它来自差分密码分析算法。

算法中所述的循环是:

在此处输入图像描述

在此处输入图像描述

密文 C0 = (L0,R0) 密文 C1 = (L1,R1)

在哪里

                long long c0 = 0x78661EB54FE76763;
                long long c1 = 0x98D9EC2327F1BF03;

到目前为止我的尝试

                long long c0 = 0x78661EB54FE76763;
                long long c1 = 0x98D9EC2327F1BF03;

                for (int c0 = 0; c0 <= 0xff; c0++)
                {
                    for (int c1 = 0; c1 <= 0xff; c1++)
                    {
                    }
                }

但我不知道如何处理对十六进制值的依赖。它是后序:(0, 0), (0, 1), (1, 2), ..., (0, 255), (1, 0), ...</p>

所以这意味着所有可能的组合——只要你把它们全部看完,排序就无关紧要了。

4

1 回答 1

2

缺乏上下文使您难以理解您的问题。看发现问题在于D = (c 0 , a 0 ⊕ c 0 , a 1 ⊕ c 1 , c 1 ),即您需要知道如何从 4 元组中生成 32 位值8位值。这可以简单地通过将值移动到相应的位置来完成:

                for (int c0 = 0; c0 <= 0xff; c0++)
                    for (int c1 = 0; c1 <= 0xff; c1++)
                    {
                        uint32_t D = c0<<24|(a0^c0)<<16|(a1^c1)<<8|c1;
                        …
                    }
于 2018-06-01T14:27:21.453 回答