A5 / 1安全算法3

时间:2015-01-28 22:50:13

标签: c security

在以下链接中,我们有一个A5 / 1算法的教学实现。我知道它是如何工作的但我无法理解bit parity(word x)函数的用途是什么?我知道它是什么,但只要告诉我它是如何工作的。

typedef unsigned long word;
typedef word bit;

/* Calculate the parity of a 32-bit word, i.e. the sum of its bits modulo 2 */
bit parity(word x) {
    x ^= x>>16;
    x ^= x>>8;
    x ^= x>>4;
    x ^= x>>2;
    x ^= x>>1;
    return x&1;
}

算法链接: http://scard.org/gsm/a51.html

1 个答案:

答案 0 :(得分:0)

除了对类型大小做出一些可能无根据的假设(这些天,unsigned long通常是64位,而不是32位),这不是很难的代码。

鉴于x是32位值,那么:

  • x ^= x >> 16; xles x的前16位,底部16位。最低16位分别给出原始32位字中的一对位的奇偶校验。

此过程重复最后8位,然后是4,然后是2,然后是1位,因此最后,最低有效位是原始32位值的奇偶校验。

如果unsigned long是64位值,则代码仍会产生输入值不太重要的32位的奇偶校验。