网络通信中最重要的就是数据部分,而保证数据的正确安全传输,就要牵扯到数据的编码和数据的加密问题,今天的三问就是关于编码和加密:
- 介绍对称加密和非对称加密
- 数字签名的原理
- Base64算法是什么,是加密算法吗?
介绍对称加密和非对称加密
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
Base64算法是什么,是加密算法吗?
- Base64是一种将二进制数据转换成64种字符组成的字符串的编码算法,主要用于非文本数据的传输,比如图片。可以将图片这种二进制数据转换成具体的字符串,进行保存和传输。
- 严格来说,不算。虽然它确实把一段二进制数据转换成另外一段数据,但是他的加密和解密是公开的,也就无秘密可言了。所以我更倾向于认为它是一种编码,每个人都可以用base64对二进制数据进行编码和解码。
- 面试加分项:为了减少混淆,方便复制,减少数据长度,就衍生出一种base58编码。去掉了base64中一些容易混淆的数字和字母(数字0,字母O,字母I,数字1,符号+,符号/) 大名鼎鼎的比特币就是用的改进后的base58编码,即Base58Check编码方式,有了校验机制,加入了hash值。