1.公鑰加密和私鑰解密:
公鑰加密和私鑰都是使用證書生成的,并非我們自定義字符串就可以 我們使用的是生成好的公鑰加密和私鑰。
兩者的區別:
1.公鑰,用于加密數據. 用于公開, 一般存放在數據提供方, 例如iOS客戶端.
2.私鑰,用于解密數據. 必須保密, 私鑰泄露會造成安全問題.
公鑰加密和私鑰必須相對應
2.說明:
其實公鑰和私鑰都可以用來加密或解密---只要能保證用A加密,就用B解密就行。至于A是公鑰還是私鑰,其實可以根據不同的用途而定。例如說,如果你想把某個消息秘密的發給某人,那你就可以用他的公鑰加密。因為只有他知道他的私鑰,所以這消息也就只有他本人能解開,于是你就達到了你的目的。但是如果你想發布一個公告,需要一個手段來證明這確實是你本人發的,而不是其他人冒名頂替的。那你可以在你的公告開頭或者結尾附上一段用你的私鑰加密的內容(例如說就是你公告正文的一段話),那所有其他人都可以用你的公鑰來解密,看看解出來的內容是不是相符的。如果是的話,那就說明這公告確實是你發的---因為只有你的公鑰才能解開你的私鑰加密的內容,而其他人是拿不到你的私鑰的。最后再說一下數字簽名。數字簽名無非就兩個目的:證明這消息是你發的;證明這消息內容確實是完整的---也就是沒有經過任何形式的篡改(包括替換、缺少、新增)。其實,上面關于“公告”那段內容,已經證明了第一點:證明這消息是你發的。那么要做到第二點,也很簡單,就是把你公告的原文做一次哈希(md5或者sha1都行),然后用你的私鑰加密這段哈希作為簽名,并一起公布出去。當別人收到你的公告時,他可以用你的公鑰解密你的簽名,如果解密成功,并且解密出來的哈希值確實和你的公告原文一致,那么他就證明了兩點:這消息確實是你發的,而且內容是完整的。
例子:
1.小明想秘密給小英發送消息
2.小英手里有一個盒子(public key),這個盒子只有小英手里的鑰匙(private key)才打得開
3.小英把盒子送給小明(分發公鑰)
4.小明寫好消息放進盒子里,鎖上盒子(公鑰加密)
5.小明把盒子寄給小英(密文傳輸)
6.小英用手里的鑰匙打開盒子,得到小明的消息(私鑰解密)
7.假設小剛劫持了盒子,因為沒有小英的鑰匙,他也打不開