循环依赖于十六进制值的算法
Loop in an algorithm which is dependent on hex value
我只是在学习 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), ...
所以这意味着所有可能的组合 - 只要您遍历所有组合,顺序并不重要。
由于缺乏上下文,很难理解您的问题。查看 it 发现问题出在 D = (c0, a0 ⊕ c0, a1 ⊕ c1, c1), i. e.您需要知道如何从 8 位值的 4 元组中生成 32 位值。这可以简单地通过将值移动到相应的位置来完成:
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;
…
}
我只是在学习 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), ...
所以这意味着所有可能的组合 - 只要您遍历所有组合,顺序并不重要。
由于缺乏上下文,很难理解您的问题。查看 it 发现问题出在 D = (c0, a0 ⊕ c0, a1 ⊕ c1, c1), i. e.您需要知道如何从 8 位值的 4 元组中生成 32 位值。这可以简单地通过将值移动到相应的位置来完成:
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;
…
}