购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 编码

1.3.1 ASCII 编码

因为现代通信的通信量大,时限要求高,所以除了极少部分的文件还是采用线下递送的交换方式,绝大部分信息交换都是通过网络完成的。使用网络就需要使用计算机,计算机底层硬件只能表示 0 和 1 两个数字,即半导体的断开和闭合。为了让计算机读懂人类的语言,IEEE 就设计了 ASCII,ASCII 全称为 American Standard Code for Information Interchange,即美国信息交换标准代码,这是一套基于拉丁字母的计算机编码系统。因为计算机只能处理二进制数,所以 ASCII 表在计算机领域应用甚广,它可以将拉丁字母和阿拉伯数字转化为二进制码。该表是 IEEE 的经典之作,是确立了 IEEE 在今天地位的成果之一。

大部分密码算法都是在计算机上运行的,计算机能处理的数据仅为 0 和 1 。由 0 和 1组成的字符串称为二进制数,比如 1001 0010。

ASCII 表包含二进制、十进制和十六进制,以及对应的字符。表中常用字符共有 96 个,如表 1-1 所示。

可以发现每个字符都对应着二进制(Binary)、十进制(Decimal)和十六进制(Hexadecimal) 数。十进制数和二进制数之间是怎么转化的呢?

十进制整数转换为二进制整数采用“除 2 取余,逆序排列”法。下面举一个例子。

1.3.1 将十进制数 13 转化为二进制数。

解:

然后逆序排列,得到1101,就是 13 的二进制数了。

二进制数转为十进制数则是从左到右用二进制数的每个数字乘以 2 的相应次方然后相加起来得到的,次方数最高为 为二进制数的长度),最低为 0 。也举一个例子。

1.3.2 将二进制数 10010011 转化为十进制数。

解: 10010011 一共 8 位数,因此次方项最高为 7 次。

所以 10010011 转成十进制数就是 147 。

表1-1 ASCII 表

十六进制也是计算机比较常用的一种进制方式。它由 组成,字母不区分大小写。与十进制的对应关系是: 对应 对应

它与十进制的转化方法与二进制类似,只是将底数从 2 换成 16 。比如: 2C (十六进制) (十进制 ) ; 90 (十进制) 5A (十六进制)。

除了二进制、十进制和十六进制,还有四进制、八进制、三十二进制。不过这些不常用,有兴趣的读者可以思考它们之间是如何互相转化的。

了解完简单的计算机编码知识后,还需要了解它们的单位。

● 比特(Bit)。也称 “二进制位”,通常简称 “位”,是二进制最小的信息单位,取值只有数字 0 和 1 。

● 字节(Byte)。简称 B,1字节代表 8 位,这 8 位可以构成 256 种组合,是计算机存储容量的基本单位。通常一个英文字母使用 1 字节表示,一个汉字使用 2 字节表示。

● 字(Word)。由两个或两个以上比特组成的比特串,长度不定。在 AES 分组密码中,一个字通常指 32 位或 4 字节。

● 千字节 (Kilobyte)。简称 KB,

● 兆字节 (Megabyte)。简称 MB,

● 吉字节 (Gigabyte)。简称 GB,1GB=1024MB。

● 万亿字节 (Trillionbyte)。简称 TB,1TB = 1024GB。

当然后面还有更多的单位,但与密码学关系不大。可以发现,计算机存储单位的进率是 1024 而非 1000 ,因为 ,是二进制的。但对于日常的计算机产品,为了方便计算,都是以 1000 为进率的。比如一个 1 TB 的移动硬盘,实际上是 ,即约为标定容量的

1.3.2 异或运算

异或运算需要在二进制中进行,如果不是二进制数,就需要将该数字转换成二进制数,再进行计算。下面看看二进制中异或运算的结果:

1 XOR 1=0

0 XOR 0=0

1 XOR 0=1

0 XOR 1=1

为了书写方便,异或运算可以用 表示,即 。为了便于理解,可以想象一下现在有两块磁铁。假设规定磁铁互斥的值是 0 ,互相吸引的值是 1 。磁铁有南北两极,南极表示 1 ,北极表示 0 。两个磁铁的南极和南极放在一起会互斥,所以得到 0 ,北极同理。但是将两个磁铁的南极和北极放在一起,就会吸引,所以是1。

异或运算还有许多有意思的性质。

● 归零律:

● 恒等律:

● 交换律:

● 结合律:

● 自反律:

自反律的证明非常简单, 。自反律的作用非常强大,在某些密码算法中,可以运用自反律来跳过密钥并获得明文。 t5ANmT723wMSyig8pk7lgIe3p0xnp/EyRbFREBGsmsxHz7jFG6y+frfKCZW5UV76

点击中间区域
呼出菜单
上一章
目录
下一章
×