比特串-密码术的奥秘

时间:2023-12-05 00:49:03

比特串

正如我们刚才强调的,大多数现代密码不涉及字母代换,取而代之的是使用一种编码模式将信息转换为一个二进制数(比特)序列,即0和1的序列(亦称比特串)。最通用的编码模式大概是美国国家信息交换标准码(ASCII)。然后代表明文的这种比特序列被加密,所得到的密文仍是比特序列。

比特串-密码术的奥秘

加密算法可以通过好几种方式作用于比特串。它们很“自然”地分为两类:流密码分组密码。流密码要求对序列进行逐位加密,而分组密码要求将序列按预定的大小分成区组。ASCII要求用8个比特表示一个字符,因此若一个分组密码每个区组有64个比特,加密算法则同时作用于8个字符。

有一点很重要,即同一个比特序列可以写成很多不同的样式。特别是,写成的样式可能取决于序列被分成的区组的大校

考虑下列12比特的序列:1 0 0 1 1 1 0 1 0 1 1 0。如果分成长度为3的区组,我们得到:100 111 010 110。任意一个长度为3的比特串代表从0到7的一个整数,这样上述序列就代表4 7 2 6。要是读者略过了第三章的附录并且不熟悉整数的二进制表示,那么请记住:

000=0,001=1,010=2,011=3,100=4,101=5,110=6,111=7.

如果我们将上面同一序列分成长度为4的区组,则得到:1001 1101 0110。因长度为4的比特串可表示从0到15之间的整数,我们得到9 13 6。一般来说,长度为n的二进制序列可以代表从0到2n-1之间的一个整数。所以,一旦我们商定每个区组的长度为s,那么一个任意长度的二进制序列都可以写为从0到2s-1之间的整数组成的序列。

具体的数学细节并不重要。重要的是应注意,同一比特串根据所选定区组的长度的不同,可以被表示为多种不同形式的整数序列。还有一点需要记住,那就是当区组的长度确定后,那些太小的数前面可能需要添加几个0以补足长度。例如整数5的二进制表示是101。但是如果区组的长度是6,则5应表示为000101,如果区组长度是8,5应表示为00000101。

另一种写比特串的通用方法是使用十六进制表示法HEX)。对于十六进制表示法,比特串被分为长度等于4的区组,表示方法如下:

于是,上述序列用十六进制表示为9 D 6

因为密码算法是作用于二进制序列的,我们需要熟悉一种常用的将两个比特合并在一起的方法,它被称为互斥“或”运算,常记为XOR或⊕。它与模2加法相同,定义如下:0⊕ 0=0,0⊕1=1,1⊕0=1,1⊕1=0。这些运算可以用下列表格表示。

XOR或⊕运算表

这种简单的运算给出了将两个长度相同的比特串进行合并的方法。我们可以对处于相同位置的两个二进制数作XOR运算。例如我们想计算10011⊕11001的值。10011最左边的比特是1,11001最左边的比特也是1。于是,10011⊕11001的最左边的比特是对这两个数串最左边的比特作XOR运算而得到的,请注意10011⊕11001最左边的比特是1⊕1,结果为0。继续使用这个方法,我们有10011⊕11001=1⊕1 0⊕1 0⊕0 1⊕0 1⊕1=01010。同样的计算可用下列图表表示。