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的移动硬盘,实际上是,即约为标定容量的。