普遍的加密方法:客戶端用RSA的公鑰加密AES的秘鑰,服務器端用私鑰解開獲得的AES的秘鑰,客戶端再與服務器端進行AES加密的數據傳輸,即HTTPS協議傳輸的原理
加密解密概念
對稱加密算法:加密解密都使用相同的秘鑰,速度快,適合對大數據加密,方法有DES,3DES,AES等
非對稱加密算法
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
公開密鑰與私有密鑰是一對,可逆的加密算法,用公鑰加密,用私鑰解密,用私鑰加密,用公鑰解密,速度慢,適合對小數據加密,方法有RSA
散列算法(加密后不能解密,上面都是可以解密的)
用于密碼的密文存儲,服務器端是判斷加密后的數據
不可逆加密方法:MD5、SHA1、SHA256、SHA512
RSA流程:
假設A、B雙方均擁有一對公私鑰(PUB_A、PRI_A、PUB_B、PRI_B)。
A向B發送Message的整個簽名和加密的過程如下:
A先使用HASH對Message生成一個固定長度的信息摘要Message_hash_A
A使用A的私鑰PRI_A對Message_hash_A進行簽名得到Message_sign(這里為什么不直接對Message進行簽名,而要對Message_hash_A進行簽名呢?因為Message的長度可能很長,而Message_hash_A的長度則是固定的,這樣性能更高,格式也固定,況且hash的結果一般不會出現重復的可能)
A接著使用B的公鑰PUB_B對信息Message和信息Message_sign進行加密得到Message_RSA,這時A將Message_RSA發送給B。
當B接收到A的信息Message_RSA后,獲取Message的步驟如下:
B用自己的私鑰PRI_B解密得到明文:Message和Message_sign;
然后B使用A的公鑰PUB_A解Message_sign得到Message_hash_A;同時,B再對Message使用與A相同的HASH得到Message_hash_B;
如果Message_hash_A與Message_hash_B相同,則說明Message沒有被篡改過。
上面的過程中,A知道A的公私鑰同時也要知道B的公鑰;同理B要知道A的公鑰和B的公私鑰
關于公私鑰再打個比方:公鑰就像一把鎖一樣將數據鎖住;私鑰就像鑰匙一樣,能將對應的鎖打開。
公鑰加密,私鑰解密的好處是:公鑰可以公開,那么無論誰有公鑰都可以給你發送信息,而且也只有你才能解密
我們經常使用的Github就是使用了簽名的方法,SSH,在本地電腦生成一對公私鑰,將公鑰傳到github,然后使用私鑰進行簽名,github通過公鑰延簽后認為你的身份合法。
另外,加密和編碼是不一樣的,比如ASCII是屬于編碼,是將0~255與字符一一對應。