一、签名证书

签名文件和证书是成对出现的,二者不可分离。
这两个文件名字是一样的,只是后缀名不一样。
1、数字签名
是对 非对称加密技术 和 数字摘要技术 的具体应用。

1)消息的发送者,先要【生成一对公私钥对,将公钥给消息的接收者】。

2)消息的发送者给消息接收者发消息,在发送的信息中,
  除了要包含原始的消息外,还要加上另外一段消息。

	这段消息通过如下两步生成:
	 
	 i.对要发送的原始消息【提取消息摘要】
	 
	ii.对提取的信息摘要【用自己的私钥加密】
	
	(通过这两步得出的消息,就是所谓的原始信息的数字签名。)
	
3)信息的接收者来,所收到的信息,将包含两个部分,
  一是原始的消息内容,二是附加的那段数字签名。
  
  他将通过以下三步来验证消息的真伪:
	 
	 i.对原始消息部分【提取消息摘要】,注意这里使用的消息摘要算法要和发送方使用的一致
	
	ii.对附加上的那段数字签名,【使用预先得到的公钥解密】
	
	iii.【比较前两步所得到的两段消息】是否一致。
	   一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;
	   不一致,则表明传送的过程中一定出了问题,消息不可信。
2、数字证书
由CA颁发给网站的身份证书。
	
数字证书一般包含以下一些内容:
	证书的发布机构(Issuer)
	证书的有效期(Validity)
	消息发送方的公钥
	证书所有者(Subject)
	数字签名所使用的算法
	数字签名

数字证书其实也用到了数字签名技术,签名的内容是消息发送方的公钥,以及一些其它信息。

数字证书中签名者是要有一定公信力的机构。

一般来说,这些有公信力机构的根证书,已经在设备出厂前预先安装到了设备上了。
所以,数字证书 可以保证 数字证书里的公钥 确实是这个证书的所有者的。

数字证书主要是用来解决公钥的安全发放问题。

二、公钥私钥

HTTPS,采用非对称加密。非对称加密会生成一对公钥和私钥。

私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。

公钥和私钥是成对出现的,它们可以互相解密。
公钥加密的内容,只有私钥可以解密。
私钥加密的内容,只有公钥可以解密。
(公钥加密私钥解,私钥签名公钥验证。)

三、数字摘要的理解

对一个数据源进行一个算法之后得到一个摘要,也叫作数据指纹,不同的数据源,数据指纹肯定不一样。

消息摘要算法(Message Digest Algorithm)是一种能产生特殊输出格式的算法,

原理:是根据一定的运算规则对原始数据进行某种形式的信息提取,
	  被提取出的信息就被称作原始数据的消息摘要。

著名的摘要算法:MD5算法、SHA-1 算法、及其大量的变体。

消息摘要的主要特点有:
	
	1)无论输入的消息有多长,计算出来的【消息摘要的长度总是固定的】
	
	  用 MD5算法 摘要的消息有128个比特位。
	  
	  用 SHA-1 算法摘要的消息最终有160比特位的输出。
	
	2)一般来说(不考虑碰撞的情况下),只要输入的原始数据不同,
	
	  对其进行摘要以后产生的消息摘要也必不相同,即使原始数据稍有改变,
	  
	  输出的消息摘要便完全不同。但是,相同的输入必会产生相同的输出。
	
	3)具有不可逆性,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的原始消息。

四、加密和编码相关

1、 Base64

Base64也不是加密解密算法,只能算是一个编码算法。
通常用于 把二进制数据编码为可写的字符形式的数据
对数据内容进行编码来适合传输 (可以对img图像编码用于传输)
是一种 可逆的编码方式

这64个字符为:
a-z(26个)、A-Z(26个)、0-9(10个)、+ 和 / (2个),共64个

2、散列

常见的散列算法有:MD5、SHA-1 、HMAC。散列算法不是加密算法。

1)MD5(Message-Digest Algorithm 5)
	密码通常用md5算法加密。
	虽然不能通过逆向的方式恢复成明文,却可以通过碰撞的方式得到原密码或者替代密码。
	
	md5加盐
	
	盐,是一串比较复杂的字符串。加盐目的是加强加密的复杂度。
	加盐并不表示安全,“盐”可能被泄露出去。
	加盐也可以加动态的盐。

2)SHA1(Secure Hash Algorithm)
	

3)HMAC(Hash Message Authentication Code)

3、对称加密

对称加密就是通信双方使用相同的秘钥加密解密。

对称加密算法有DES、3DES(TripleDES),DESede、AES、Blowfish,以及RC2和RC4算法,
还有其他第三方提供的软件包提供的Bouncy Castle 提供的IDEA算法。

1)AES(Advanced Encryption Standard)

	AES翻译过来是高级加密标准,它是用来替代之前的DES加密算法的。
	因为AES加密算法的安全性要高于 DES和3DES,所以AES已经成为了主要的对称加密算法。
	
2)注意点
	
	服务端、客户端必须使用一样的密钥和初始向量IV。
	服务端、客户端必须使用一样的加密模式。
	服务端、客户端必须使用一样的Padding模式。
	
	以上三条有一个不满足,双方就无法完成互相加解密。

	针对对称加密密钥传输问题这个不足:我们一般采用RSA+AES加密相结合的方式,
	用AES加密数据,而用RSA加密AES的密钥。
	同时密钥和IV可以随机生成,只要是128位16个字节就行,但是必须由服务端来生成。
	
	因为如果由我们客户端生成的话,就好比我们客户端存放了非对称加密的私钥一样
	,这样容易被反编译,不安全,一定要从服务端请求密钥和初始向量IV。

4、非对称加密

非对称加密使用一对密钥:公钥(public key)和私钥(private key)。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。

公钥和私钥是成对出现的,它们可以互相解密。
公钥加密的内容,只有私钥可以解密。
私钥加密的内容,只有公钥可以解密。
(公钥加密私钥解,私钥签名公钥验证。)

主要的非对称加密算法有 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。

使用最广泛的是 RSA算法,Elgamal是另一种常用的非对称加密算法