開發(fā)中總會遇到許多關(guān)于密碼加密的問題,現(xiàn)在簡單總結(jié)一下
1、RSA加密
計算機剛開始的加密方式是對稱加密卓鹿,也就是加密纤壁、解密使用了同樣的規(guī)則(簡稱“密鑰”)。
- 甲方使用密鑰對數(shù)據(jù)加密
- 乙方使用同一種密鑰對甲方加密后的數(shù)據(jù)進行解密
也就是說這里面密鑰的傳遞成為數(shù)據(jù)解密的關(guān)鍵攻走,但又容易被截取,所以后來就出來了RSA加密:
使用兩把不同的密鑰對數(shù)據(jù)進行加密、解密箫攀,同樣能達到以上加密方式的效果,卻又減少了密文被破解的可能性幼衰。這里兩把密鑰分別稱為:公鑰和私鑰靴跛。
- 乙方生成公鑰和私鑰,這里公鑰是公開的渡嚣,任何人可以獲取梢睛,而私鑰是私密的
- 甲方通過公鑰加密后的數(shù)據(jù)傳遞給乙方
- 乙方拿到數(shù)據(jù)后肥印,通過私鑰進行解密
這樣一種對數(shù)據(jù)進行加密、解密的方式就是非對稱加密绝葡,用三位數(shù)學(xué)家的名字頭表示深碱,分別為R、S藏畅、A敷硅,所有非對稱加密又被成為RSA加密。
2愉阎、哈希(散列)函數(shù)
一般來說竞膳,我們現(xiàn)在用得最多的就是這種方式的加密:MD5、SHA1诫硕、SHA256等
- MD5:就是一個信息摘要
MD5的實現(xiàn)原理:
- 對數(shù)據(jù)進行補位以被512整除得448坦辟,這里補位是指即使元數(shù)據(jù)能被整除,也需要進行補位章办,所以補位的范圍為[1, 512]锉走,這時,補位后的數(shù)據(jù)再加上64位就能被512整除藕届;
- 再把原數(shù)據(jù)補位到能被64位整除挪蹭,并添加到上一步結(jié)果的后面,這時數(shù)據(jù)如果大于2^64就將高位符64位之后的刪除休偶,只保留低位數(shù)據(jù)并且進行小端排序(低位在前)梁厉,現(xiàn)在數(shù)據(jù)就可以表示為[S0, S1, S2, ..., Sm?2, Sm?1],其中 m 為 16 的倍數(shù)踏兜。
- 初始化4字節(jié)緩存區(qū)以計算出MD5的值词顾,在 MD5 算法中有四個 32 位(bit) 16 進制的整數(shù)的寄存器,稱為鏈接變量碱妆,低字節(jié)在前肉盹。
- 我們分別對上述4個32位的整數(shù)按照自定義的非線性輔助函數(shù)進行循環(huán),在總長度/16次大循環(huán)后得到4個32位的整數(shù)疹尾,按照低位到高位的拼接就得到了MD5后的數(shù)值上忍,整個過程是不可逆的。
MD5現(xiàn)在在http://www.cmd5.com/很容易就能得到加密后的結(jié)果纳本,同理也能反推明文窍蓝。這時我們的處理辦法一般是加鹽、HMAC
- 加鹽:在明文的前面繁成、中間吓笙、后面加上定長的字符串再MD5后得到的密文,但這時鹽又容易被泄漏朴艰,還是不太安全观蓄,于是就出現(xiàn)了HMAC混移。
- HMAC:在服務(wù)器上由隨機函數(shù)隨機得到鹽,連服務(wù)器都不知道侮穿,由客戶端獲得之后拼接在明文的后面歌径,再MD5后的密文。
這里HMAC有一個應(yīng)用就是設(shè)備鎖亲茅,當(dāng)應(yīng)用第一次登錄時回铛,會將鹽保存在本地,這時如果在另外一臺機子上登錄賬號克锣,而又被鎖住茵肃,就不能從服務(wù)器上得到鹽,從而無法登錄袭祟。
3验残、AES加密
這是一種高級加密方式,美國聯(lián)邦政府巾乳、iOS系統(tǒng)就是通過這種方式加密的您没,比如說鑰匙串。這是一個對稱胆绊、塊加密方式氨鹏。塊就是密碼長度過長可以通過分割,然后再對分割后的小塊進行加密压状,這里密鑰長度和數(shù)據(jù)的分組長度是相互獨立的仆抵。
- 秘鑰變幻
- 明文加密
每次加密所用到的秘鑰是經(jīng)過計算之后得到的擴展秘鑰,而非AES原始輸入秘鑰种冬,這樣就保證密鑰即使被盜也不擔(dān)心密文被破解镣丑。
http://rainman.me/47.html
http://blog.csdn.net/honlangwu/article/details/52621250