c - if 语句计算流密码 Leviathan 源代码中的整数

标签 c if-statement encryption bit-manipulation

我目前正在尝试研究利维坦流密码的源代码。 不幸的是,有一些代码块我不理解。

这是第一个:

if (i & leaf_number) {

  g(x, y, z, L->F);  /* right */

}

我不明白的是,为什么原始编码器使用i & leaf_number作为if(语句)

最佳答案

它使用了 C 的隐式规则,即零是 false ,非零为 true .

所以,读作:

if((i & leaf_member) != 0)  /* Any of leaf_member's 1-bits also 1 in i? */

换句话说,if如果位掩码 leaf_member 中有任何位,则采用该位当前设置为i .

希望 leaf_member 中仅设置一个位,测试自然只针对该位。如果有多个位,则比较应该是:

if((i & leaf_member) == leaf_member) /* All of leaf_member's 1-bits 1 in i? */

关于c - if 语句计算流密码 Leviathan 源代码中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908872/

相关文章:

c - 用 C 将项目插入堆栈

c - MSP430 中断开销

database - 使用 SHA1 key 避免 BigTable 或 HBase 中的热点

java - 如何使用 Java 在 XML 文件中保存加密/散列密码

c - 为什么 strace 遵循不同的执行流程?

c - 双缓冲设计I/O同步

c - printf 语句出错? (在 C 中)*更新*

php - 如果和空行为古怪

JavaScript - 循环内的 If 语句出现问题

python - 通过网络或任何其他 key 交换进行 Diffie-Hellman key 交换