关于对称加密与非对称加密
所谓对称加密,比较简单,就是通信双方约定好加密解密算法,这个算法需要的密钥双方都知道,整个过程大概就像下面这样
void encryptMsg(const char* cipher, const char* IN, size_t len_in, char* out, size_t* len_out); void decryptMsg(const char* cipher, const char* IN, size_t len_in, char* out, size_t* len_out);
对称加密有个问题,就是说,一旦这个密钥也被劫持,那么通信仍然是不安全的。 这个问题需要借助非对称加密解决。
所谓非对称加密(RSA), 对于通信双发,每个人都有两把密钥,一个公钥,一个私钥。也就是说A和B通信,A会把自己的公钥给B, B用A的公钥加密自己的信息,发给A, A再用自己的私钥解密,这样就完成了B到A的信息加密 --> 发送 ---> 解密
A到B也是同理。这个过程中,即使公钥和密文都被截获也不用担心,因为只有有私钥才可以解密,没有私钥即使知道了算法,也无法在短时间内解密。当然私钥还是要保存好的,不然电脑被攻破,私钥被获取了,也是芭比Q的
举个常见的使用了这个技术的例子:我们使用gerrit的时候,需要在本地使用ssh-key 工具本地生成一对密钥,其中id_rsa.pub 就是我们的公钥,公钥是要发给对方的,还有一个文件是id_rsa文件,这个就是私钥,本地保存的。那我们使用git和gerrit服务器通信的时候,底层就使用了非对称加密,我们在git clone的时候应该会顺便会gerrit的公钥拉下来,当然,这个对用户不感知,当我们push代码的时候,则用对方的公钥加密,发送过去,当我们git pull的时候,则是对方使用我们的公钥加密,然后本地解密。于是这个过程就完成了安全通信。