文本数据可以由各种各样的字符构成,因计算机只认识二进制数据0和1(字符编码的作用),所以给每个字符按照特定的字符编码体系规则(这个体系规则称之为字符集)分配了一个数字,我们称之为“字符编码”。字符集有ASCII字符集(最初只是美国自用)、Unicode字符集(后来越来越多国家也开始用计算机,ASCII不够用了)等等。
如上图 ASCII 码表所示,在使用了 ASCII 编码的计算机中,就会把 NIKKEI 处理成“78 73 75 75 69 73”放入计算机中。当要把这一串数字转为对应的字符显示在屏幕上时,又可以变成人们所认识的 NIKKEI 了。
通常把类似于“78 73 75 75 69 73”这种未经加密的数据称之为“明文”。
我们来亲自体验一下数据加解密的过程,把字母N(其字符编码用二进制表示是01001110)与数值3 (用二进制表示是00000011)做XOR运算,将明文转换成密文(也就是加密):
得出的密文是字母 M 的字符编码。有趣的是,用 XOR 运算加密后的密文,可以通过相同的数值进行 XOR 运算解密:
其中用于加密和解密的数字称之为“密钥”(例子中的数值3),至此,我们大体可以了解到加/解密过程中不可或缺的两个因素:加解密算法(例子中的XOR运算)+密钥
如上个例子中使用相同的密钥进行加密和解密,这种加密技术称之为“对称加密算法”或者“单密钥加密算法”:
算法虽然简单快速,但缺点也十分明显:加密的信息发送给接收者时,还需要把密钥也发送过去,在这个过程中密钥很容易被黑客拦截,所以最常见的方法是把对称密钥进行非对称加密,让解密时的密钥不同于加密时的密钥,就可以克服对称密钥加密技术的缺点,确保数据的安全。
著名对称加密算法
国密算法SM1:算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
国密算法SM4:2016年,无线局域网产品适用。
国际算法DES/3DES: DES算法的密钥长度一共有56位,3DES算法是把密钥的长度放大三倍即168,DES算法存在很大的延迟性,不能够用于无线/语音视频加密。
在非对称加密算法中,用于加密的密钥可以公开给全世界,因此称为“公钥”,而用于解密的密钥是只有自己才知道的秘密,因此称为“私钥”。用其中一把密钥加密,就只能用另外一把密钥解密(注意!这里写的是“其中一把密钥”,也就是说你可以用私钥来加密数据,然后用公钥来解密)。
使用公钥加密后的数据发送给私钥持有者,即使被拦截或窃取,没有私钥的黑客也无法获得加密后的信息,保证数据的安全传输。
举个经典的非对称加密算法 RSA 算法例子,使用 RSA 算法创建公钥和私钥的步骤如下:
在使用密钥进行加密和解密时,需要对每个字符执行如图下所示的运算。这里参与运算的对象是字母 N (字符编码为78)。用公钥对 N 进行加密得到224,用私钥对224进行解密可使其还原为78。
看完这个例子,各位千万不要以为只要了解 RSA 算法,就能通过公钥来推算出私钥了。公钥和私钥虽然是一堆互相关联的密钥,但是并不能从两者中的任何一把推算出另外一把。例子中的私钥推算是知道公钥推算过程的前提下进行的推算,在实际应用公开密钥时,常常会将“C”中的位数扩充至1024位,要将这样的数字分解成素数,即使计算机速度再快,也得花上大概137年的时间才能得出结果。
数字签名是非对称加密实际应用的一种,我们平常都会在合同这种重要文件上面签上自己的大名,代表了本人已经承认了文件的内容是完整有效的。而数字签名与手写签名的作用基本一致,就是为了验证在互联网中传输的内容数据是对方签名后发出,并且信息没有被掉包和篡改(数字签名的作用)。
因手写签名的笔迹每个人都是独一无二很难伪造,数字签名为了达到同样的效果,采用了非对称加密技术与数字摘要技术结合应用,并附加到数据上(例如程序上加数字签名可以验证程序是否有被修改过,有些操作系统安装软件包时找不到数字签名还会报图下所示的错:
)。
举个很简单的例子体验下数字签名的加解密过程:
【文本数据的发送者】
(1)选取一段明文
例:NIKKEI
(2)计算出明文内容的信息摘要(一个数值)
例:(78+73+75+75+69+73)÷100 的余数 = 43
(3)用私钥对计算出的信息摘要进行加密
例:43 → 66(字母B 的编码,经过一系列复杂的算法计算出来,具体怎么算的暂不深究)
(4)把步骤(3)得出的值附加到明文后面再发送给接收者
例:NIKKEIB
【文本数据的接收者】
(1)用发送者的公钥对信息摘要进行解密
例:B = 66 → 43(同样经过一系列复杂的运算)
(2)计算出明文部分的信息摘要
例:(78+73+75+75+69+73)÷100 的余数 = 43
(3)比较在步骤(1)和(2)中求得的值,二者相同则证明接收的信息有效
例:因为两边都是43,所以信息有效
上述例子只是简单地体验一下数字签名的认证过程,而在实际应用中的数字签名,使用的是通过更加复杂的公式计算得出的、被称作MD5的信息摘要(或者其他更高级的)。