对公钥和私钥有点稀里糊涂的,搜索了一些资料,做一些整理吧,先看这个:html
加密--公钥
解密--私钥
签名--私钥
验证--公钥git
看了这个也许会对私钥用于签名不解,其实它等同于用私钥加密,而公钥验证就是用公钥解密,可是不能用于保密信息。由于公钥是公开的。算法
再来一个:浏览器
1)公钥和私钥成对出现
2)公开的密钥叫公钥,只有本身知道的叫私钥
3)用公钥加密的数据只有对应的私钥能够 解密
4)用私钥加密的数据只有对应的公钥能够解密
5)若是能够用公钥解密,则必然是对应的私钥加的密
6)若是能够用私钥解密,则 必然是对应的公钥加的密安全
公钥和私钥均可以用来加密或解密---只要能保证用A加密,就用B解密就行。至于A是公钥仍是私钥,其实能够根据不一样的用途而定。post
1、公钥加密,私钥解密——用于保密信息网站
若是你想把某个消息秘密的发给某人,那你就能够用他的公钥加密。由于只有他知道他的私钥,因此这消息也就只有他本人能解开,因而你就达到了你的目的。加密
2、私钥加密,公钥解密——用于数字签名
spa
严格来讲,这里说的私钥加密是用私钥对摘要进行加密,接收方能够用公钥解密,解密成功则可验证信息的发送者是私钥的拥有人。由于公钥是公开的,因此起不了保密信息的做用。.net
若是你想发布一个公告,须要一个手段来证实这确实是你本人发的,而不是其余人冒名顶替的。那你能够在你的公告开头或者结尾附上一段用你的私钥加密的内容(例如说就是你公告正文的一段话),那全部其余人均可以用你的公钥来解密,看看解出来的内容是否是相符的。若是是的话,那就说明这公告确实是你发的---由于只有你的公钥才能解开你的私钥加密的内容,而其余人是拿不到你的私钥的。
但这仅仅作到了数字签名的第一部分:证实这消息是你发的。数字签名还有第二部分:证实这消息内容确实是完整的---也就是没有通过任何形式的篡改(包括替换、缺乏、新增)。
要作到数字签名的第二部分,须要作的是:把你公告的原文作一次哈希(md5或者sha1都行),而后用你的私钥加密这段哈希做为签名,并一块儿公布出去。当别人收到你的公告时,他能够用你的公钥解密你的签名,若是解密成功,而且解密出来的哈希值确实和你的公告原文一致,那么他就证实了两点:这消息确实是你发的,并且内容是完整的。
3、对公钥进行认证——数字证书
黑客能够替换你的公钥,而后用他的私钥作数字签名给你发信息,而你用黑客伪造的公钥能成功验证,会让你误认为消息来源没变。
这种状况下须要CA(证书中心certificate authority)对公钥进行认证。证书中心用本身的私钥,对信息发送者的公钥和一些相关信息一块儿加密,生成"数字证书"(Digital Certificate)。
这个能够参考这篇文章:数字签名是什么? ,讲得很是好,图示很清楚。
经过在实际的使用中,公钥也不会单独出现,老是以数字证书的方式出现,以确保公钥的安全性和有效性。
4、对称与非对称算法
对称算法是说,加密过程和解密过程是对称的,用一个 密钥加密,能够用同一个密钥解密。使用公私钥的算法是非对称加密算法。
HTTPS通常使用了如下算法,其中就包括非对称和对称加密算法:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非对称加密算法用于在握手过程当中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。
5、HTTPS的工做原理
HTTPS在传输数据以前须要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程当中将确立双方加密传输数据的密码信息。TLS/SSL协议不只仅是一套加密传输的协议,更是一件通过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述以下:
1.浏览器将本身支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将本身的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.得到网站证书以后浏览器要作如下工做:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),若是证书受信任,则浏览器栏里面会显示一个小锁头,不然会给出证书不受信的提示。
b) 若是证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将以前生成的全部信息发送给网站。
4.网站接收浏览器发来的数据以后要作如下的操做:
a) 使用本身的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,若是与服务端发来的HASH一致,此时握手过程结束,以后全部的通讯数据将由以前浏览器生成的随机密码并利用对称加密算法进行加密。
参考: