什么是加密算法

将一些我们可以理解的内容通过算法转化为我们无法理解的内容,这一过程就是加密算法所做的。

  1. 电报报文
    二战时期,著名的中途岛海战,由于美军破译了日军的大量报文而获得了太平洋战争的关键性胜利。
    AF---------------------------------->中途岛
    加密算法与数字签名
  2. 编码
    编码其实也可以理解为是一种加密算法
  • ASCII码
    我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。
    上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。
    ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。其它的是不可见字符
    加密算法与数字签名
    但是对于其他国家的语言,语言文字远远超过ascii码中的256中状态,后来逐渐发展为unicode编码
  • UTF-8
    unicode保存着所有国家的语言和符号
    unicode的实现方式有很多,UTF-8只是其中的一种实现方式,在互联网中被广泛使用。其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。
    UTF-8使用变长字节标识字符。其核心实现其实非常简单。
    1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。

2)对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

  • BASE64
  • **我们知道在计算机中的字节共有256个组合,对应就是ascii码,而ascii码的128~255之间的值是不可见字符,比如有些文本协议不支持不可见字符的传递,只能用大于32的可见字符来传递信息 **
    例如:用纯文本协议,传输语音、图片等,都需要先进行BASE64编码
    1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
    2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
    3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
    4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;

加密算法

我们所认为的加密算法,不像编码一样是一种简单的映射规则,往往是需要一套秘钥和加解密算法。
例如对称加密算法AES和DES。

  • AES加密流程
  1. 对明文数据进行分组
  2. 每组数据利用秘钥进行多轮加密
  3. 得到加密密文
  • 非对称加密算法
    RSA 使用公钥加密 私钥解密

摘要算法

  • MD5
    不能称之为加密算法,只是通过hash对明文进行了摘要。
    MD5算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值
    多轮聚合 最终为128位即我们常见的结果又32个16进制数
    加密算法与数字签名
  • sha256
    类似于MD5,将原来的128位扩展为256位,重复的可能性更小。

数字签名与数字证书

参考https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

加密算法与数字签名
加密算法与数字签名
加密算法与数字签名
加密算法与数字签名
加密算法与数字签名
鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
加密算法与数字签名
加密算法与数字签名
加密算法与数字签名加密算法与数字签名

加密算法与数字签名
道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。

后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
加密算法与数字签名
鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
加密算法与数字签名
例如我们的https协议 浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。浏览器根据这张列表,查看解开数字证书的公钥是否在列表之内。

相关文章: