非对称加解密,私钥和公钥到底是谁来加密,谁来解密
公钥和私钥,无论谁加密,另一个密钥都能解密,关键要看你怎么用。
比如,你用私钥加密,那么公钥就可以解密,但公钥之所以叫公钥,肯定是公开的,你可能把它给了很多人,或者添加到了一些网上的平台中,这就代表你这个私钥加密的数据,能轻易的被具有对应公钥的人给解密出来,这样的话,你这个私有的加密其实就没有什么意义了,所以私钥虽然可以用来加密,但并不安全,所以实际上没有人会用私钥去加密数据,私钥都是用来签名!
什么是签名:私钥签名,就是用私钥和被签名文件一起生成一串码(这串码可能是MD5/SHA1/SHA256/SHA512等等),这串码一般保存在一个额外的文件中,当我们收到文件后,为了验证文件是否被篡改,可以用文件发布者提供的公钥+文件,就能验证文件是否被篡改过。很明显,签名只是用文件+私钥来计算一串值,并不会加密文件本身,所以签名只能用于验证文件在传输过程中是否被篡改,但无法用于加密文件。
所以,私钥虽然可以加密,但我们不会用它来加密,而是它来做签名,我们一般是用公钥来加密,因为公钥加密的文件,只有私钥持有者能解开!
比如加密情景:
如果甲想给乙发一个安全的保密的文件,那么应该甲乙各自都要有一对公私钥(注意这两对公私钥不是同一对,是他们自己各自生成的),私钥自己保留,公钥发给对方。
甲先用乙的公钥加密这个文件,最后再发给乙,乙收到后,用自己的私钥解密,这样就能看到甲发给他的保密文件了!
但是这样存在一个问题,这个文件有可能在网络中被替换成另一个文件,并且替换这个文件的人也有乙的公钥(公钥是公开的,别人有乙的公钥不奇怪),所以文件替换者一样可以用乙的公钥来加密该文件,然后乙收到后,一样能解密,乙整个过程并不知道其实文件已经被替换了!
那怎么办呢?这时候私钥签名就能派上用场了,甲可以把“用乙的公钥加密后的文件”再用自己的私钥签名,乙收到后,先用甲的公钥验证一下,这个文件到底是不是甲发给他的,因为如果不是甲发给他的,那么用甲的公钥是无法通过验证的(只有甲的私钥签名的文件,才能被甲的公钥验证通过),验证通过之后,再用自己的私钥来解密,就能查看文件了。
【甲先用乙的公钥加密这个文件,最后再发给乙,乙收到后,用甲给他的公钥解密,这样就能看到甲发给他的保密文件了!】
这里,乙收到后,应该用自己的私钥来解密吧?
对的,这里写错了,我已经改过来了