在互聯網開發中,我們在傳輸數據中經常需要對數據通過演算法進行加密,來保證信息的安全。 1.消息摘要演算法(Hash函數) 1.無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。 2.只能進行正向的信息摘要,而無法從摘要中恢復出任何的消息,即單向、不可逆的 3.好的摘要演算法,很難找到碰撞 常見的h ...
在互聯網開發中,我們在傳輸數據中經常需要對數據通過演算法進行加密,來保證信息的安全。
1.消息摘要演算法(Hash函數)
1.無論輸入的消息有多長,計算出來的消息摘要的長度總是固定的。
2.只能進行正向的信息摘要,而無法從摘要中恢復出任何的消息,即單向、不可逆的
3.好的摘要演算法,很難找到碰撞
常見的hash函數:md5,sha1,sha256等
2.加密演算法
一套加密系統:S={P, C, K, E, D}
P——明文空間,表示全體可能出現的明文集合,
C——密文空間,表示全體可能出現的密文集合,
K——密鑰空間,密鑰是加密演算法中的可變參數,
E——加密演算法,由一些公式、法則或程式構成,
D——解密演算法,它是E的逆。
1.對稱加密演算法
簡單來說,對稱式加密就是加密和解密使用同一個密鑰
DES(Data Encryption Standard):對稱演算法,數據加密標準,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
RC2和RC4:對稱演算法,用變長密鑰對大量數據進行加密,比 DES 快;
2.非對稱式加密技術
非對稱式加密就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為“公鑰”和“私鑰”,它們兩個必需配對使用,否則不能打開加密文件。這裡的“公鑰”是指可以對外公佈的,“私鑰”則不能,只能由持有人一個人知道。它的優越性就在這裡,因為對稱式的加密方法如果是在網路上傳輸加密文件就很難不把密鑰告訴對方,不管用什麼方法都有可能被別竊聽到。而非對稱式的加密方法有兩個密鑰,且其中的“公鑰”是可以公開的,也就不怕別人知道,收件人解密時只要用自己的私鑰即可以,這樣就很好地避免了密鑰的傳輸安全性問題。
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的
3.實戰
1.md5+salt
md5的安全性
大家都知道md5是不可逆的,單向的,無法破解的。但是他有沒有安全隱患的,答案是有的。
首先哈希可以碰撞,當然碰撞的難度很大,其次如果我們建立一個源數據與加密數據之間對應的hash表,然後利用表進行反查,理論上就能很快的獲得明文。這種表就是彩虹表
所以我們真正使用md5的時候會加上一個隨機的salt(鹽),,這樣利用彩虹表進行反查的時候,會增大很多的計算難度,可以嚇跑99%的黑客,因為彩虹表是空間換時間,理論上不存在包含全部數據的彩虹表。
md5(md5(password) + salt) 這種方式相對來說就非常安全了(salt的值,個人建議8-12位的字元串),即使用戶的密碼為123456,黑客利用彩虹表進行反查的時候,也會花費大量的時間。
2.rsa加密和解密
有時候需要傳輸數據,加密之後還能解密的時候,md5,sha1等摘要演算法就不夠用了,因為摘要演算法是單向,不可逆的,無法從加密數據中得到源數據.這個時候就需要加密演算法
利用openssl,生成密鑰 openssl genrsa -out rsa_private_key.pem 1024
然後利用秘鑰,生成公鑰 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem