网络通信中最重要的就是数据部分,而保证数据的正确安全传输,就要牵扯到数据的编码和数据的加密问题,今天的三问就是关于编码和加密:
1)对称加密,即加密和解密算法不同,但是密钥相同。比如DES,AES算法。
数据A --> 算法D(密钥S)--> 加密数据B
加密数据B --> 算法E(密钥S)--> 数据A
优点:缺点:密钥有可能被破解,容易被伪造。传输过程中一旦密钥被其他人获知则可以进行数据解密。
2)非对称加密,即加密和解密算法相同,但是密钥不同。私钥自己保存,公钥提供给对方。比如RSA,DSA算法。
数据A --> 算法D(公钥)--> 加密数据B
加密数据B --> 算法D(私钥)--> 数据A
优点:安全,公钥即使被其他人获知,也无法解密数据。缺点:需要通信双方都有一套公钥和私钥
1)首先,为什么需要数字签名?防止被攻击,被伪造。由于公钥是公开的,别人截获到公钥就能伪造数据进行传输,所以我们需要验证数据的来源。
2)怎么签名?由于公钥能解密 私钥加密的数据,所以私钥也能解密 公钥加密的数据。(上图非对称加密A和B代号互换即可) 所以我们用公钥进行加密后,再用私钥进行一次加密,那么私钥的这次加密就叫签名,也就是只有我自己可以进行加密的操作。所以传输数据流程就变成了加密数据和签名数据,如果解出来都是同样的数据,那么则数据安全可靠。
数据A --> 算法D(公钥)--> 加密数据B
数据A --> 算法D(私钥)--> 签名数据C
加密数据B --> 算法D(私钥)--> 数据A
签名数据C --> 算法D(公钥)--> 数据A