Python如何将单词分成64位块

2024-10-03 17:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个任务,我必须建立Diffie-Helman密钥交换。为了加快速度,我在Python中使用了位运算符,一切都很好地进行编程,但是我必须执行奇偶校验和,我认为我对这是什么或它是如何工作的没有正确的理解。在

基本上,我需要能够获取长度可变的密钥(最多2048位),将其分解为64位的字,并执行校验和。我不确定这到底意味着什么。要使用Python将一个单词分解成64位单词,您将如何进行呢?我想一旦我这样做了,我就可以对单词执行一个XOR操作来得到一个64位的输出。目前,虽然我正纠结于如何在Python中将一个词恰当地分成64位块?在


Tags: 编程密钥运算符单词校验中将xor加快速度
1条回答
网友
1楼 · 发布于 2024-10-03 17:24:39

奇偶校验和只是字中所有位的异或。最有效的方法是使用log(nbits)操作,因为可以将每次迭代处理的位数减半。例如:

def parity(word, nbits):
    if nbits & (nbits - 1):
        raise ValueError("nbits must be power of two")

    while nbits > 1:
        nbits >>= 1
        word ^= (word >> nbits)
    return word & 1

一个纵向奇偶校验有点不同,因为当你到达一个给定的字长时,你的奇偶校验应该是全0或全1,而不是单个的1或0。我不知道你想要奇数还是偶数,所以这是一个更一般的:

^{pr2}$

例如,第一个参数是一个2048位的整数,总的_位是2048位,单词_位是64,所需的奇偶校验是0或1。在

我对Diffie-Hellman的奇偶校验一无所知,但是如果你的奇偶校验是单独提供的(看起来很可能),那么你是在比较一个单独的奇偶校验字,而不是所有的一或全零。这是一个小小的调整:

def longitudinal_parity(data, total_bits, word_bits, expected_parity):
    """
    Performs longitudinal parity check
    """
    for nbits in (total_bits, word_bits):
        if nbits & (nbits - 1):
            raise ValueError("bit size must be power of two")

    mask = (1 << total_bits) - 1

    while total_bits > word_bits:
        total_bits >>= 1
        data ^= (data >> total_bits)
        mask >>= total_bits
        data &= mask
    return data == expected_parity

这里有很多可能的优化,比如预先计算掩码,从较小的数字开始掩码,等等。希望代码是可读的。在

相关问题 更多 >