加密應(yīng)用場景
1) 密碼加密,常用于登錄密碼和支付密碼等,此類加密的特點(diǎn)是希望密碼加密之后不能被解密,因此可以比較安全的保存密碼而不會泄漏明文,因此適合用不可逆加密算法,且不需要密鑰,目前這類加密算法唯一的破解方法是暴力破解,即用密碼字典等手段
不可逆的加密算法有md5
2) 網(wǎng)絡(luò)傳輸報文加密
網(wǎng)絡(luò)傳輸如果用明文,容易被截取,之后泄漏用戶敏感信息,因此對于交易類等安全要求較高的報文傳輸,要對其進(jìn)行加密,且要選擇可逆的加密算法,服務(wù)端需要解密,可以選擇的加密算法有rsa,3des等
3des加密的缺陷:
3des屬于對稱加密算法,即加密和解密都是用的同一密鑰,因此,分發(fā)和傳遞密鑰中會泄密密鑰。
假想方案一:雙方約定一個加密密鑰,密鑰可以通過線下密函分發(fā),這樣只要雙方保證密鑰不被泄漏,那么加密將是安全的
但是該方案仍然存在如下缺點(diǎn):
1. 密鑰如果長期不更換,容易泄漏,那么又要分發(fā)一次密鑰,這是不安全的
2. 如果客戶端為普通用戶使用,那么就無法保證密鑰的安全性,因此不適合用3des
這里指的是持久化保存密鑰。
假想方案二:每次請求都產(chǎn)生一個隨機(jī)的密鑰,通過網(wǎng)絡(luò)將密鑰和傳輸?shù)椒?wù)端,這樣客戶端就不需要保存密鑰,然后網(wǎng)絡(luò)傳輸密鑰仍然是不安全的
Rsa加密的缺陷:
Rsa加密報文的速度很慢,適合用戶少量數(shù)據(jù)加密
那么有沒有更好的方案呢,當(dāng)然有,那就是將rsa和3des結(jié)合起來加密
用3des加密報文,用rsa加密3des的密鑰,這樣在傳輸過程中,可以保證3des的密鑰不被泄漏,從而保證報文的密文不被破解
加密方式舉例:
請求報文:rsa公鑰(3des加密密鑰)|3des(報文明文)
響應(yīng)報文:3des(報文明文)
具體方案流程:
1) 首先客戶端在每次請求服務(wù)端的時候,隨機(jī)產(chǎn)生一個3des密鑰,且在客戶端程序的內(nèi)存中暫時保存該密鑰
2) 然后用3des對報文明文進(jìn)行加密得到密文m
3) 用rsa公鑰對3des密鑰進(jìn)行加密得到密文n
4) 將m和n拼接起來發(fā)送給服務(wù)端
5) 服務(wù)端用rsa私鑰將3des的密鑰解密
6) 并用3des密鑰解密報文
7) 響應(yīng)時,用3des對響應(yīng)報文進(jìn)行加密
8) 客戶端用保存起來的3des密鑰對響應(yīng)報文解密
9) 解密之后丟棄3des密鑰
簽名的意義:
數(shù)字簽名可以保證信息的原始性、完整性,因此,數(shù)字簽名可以解決否認(rèn)、偽造、篡改及冒充等問題。具體要求:發(fā)送者事后不能否認(rèn)發(fā)送的報文簽名、接收者能夠核實發(fā)送者發(fā)送的報文簽名、接收者不能偽造發(fā)送者的報文簽名、接收者不能對發(fā)送者的報文進(jìn)行部分篡改、網(wǎng)絡(luò)中的某一用戶不能冒充另一用戶作為發(fā)送者或接收者
具體方案:
方案一(md5加密算法+密鑰進(jìn)行簽名):
首先在數(shù)據(jù)的發(fā)送方,將報文和密鑰拼接起來,再進(jìn)行md5加密,加密之后的報文就叫簽名,然后簽名和原報文拼接起來發(fā)送至服務(wù)端,服務(wù)端也有一個密鑰,對簽名進(jìn)行驗簽,這樣即使報文傳輸過程中被篡改,由于篡改者不知道密鑰,也就沒辦法算出正確的簽名,因此服務(wù)端驗簽就不過,而且這個簽名是跟客戶端綁定的,也就保證了報文來自合法的客戶端
方案1的效果:
保證數(shù)據(jù)傳輸?shù)耐暾?/p>
保證數(shù)據(jù)來源于合法的客戶端,即其他用戶(除服務(wù)端外)無法偽造或者篡改
但是客戶端可以抵賴,因為服務(wù)端可以模擬該簽名
此方案典型的案例就是md5簽名
方案二(mac簽名)
采用一個密鑰,將報文分段用des加密
和方案1差不多,由于該方案中,密鑰與報文加密的算法更復(fù)雜,因此較md5更安全
方案三(rsa+md5)
用md5算法將報文加密得到一個串m,用rsa私鑰對m加密得到簽名s
接收者對報文用md5加密得到m1,用rsa公鑰解密s得到m2,比較m1和m2
該方案達(dá)到了方案1的效果,且加密算法也是安全的,而且由于發(fā)送者的密鑰是唯一的,即使是接收者,也不能偽造簽名,因此發(fā)送者不能抵賴自己的簽名
對稱與非對稱
從密鑰的角度來看,加密算法分為對稱加密和非對稱加密
對稱加密:
加密密碼和解密密碼是相同的
Des
3des
非對稱加密:
加密密碼和解密密碼是不相同的
Rsa
可逆與不可逆
從可逆角度來看,可以分為不可逆和可逆算法
不可逆:md5,加完密之后不可解密
可逆加密:
Rsa,des,3des
加完密之后可解
用途:常用于密碼加密和簽名
基本算法為求余
原理請參考文章:http://www.jiamisoft.com/blog/index.php/2271-md5jiamisuanfa-2.html
原理
DES 使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產(chǎn)生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過程會繼續(xù)下去,但最后一個循環(huán)不交換。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。
詳情請參考:http://aub.iteye.com/blog/1131504
比des加密更安全的一種加密算法
請參考:http://aub.iteye.com/blog/1131514
加密:公鑰加密,私鑰解密,知道公鑰,密文,明文無法推導(dǎo)私鑰,只有私鑰才能進(jìn)行解密,只要保管好私鑰,密文將不會泄密,加密安全度高
原理請參考文章:
RSA算法原理1http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理2
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
https也是基于非對稱加密算法(如rsa)和對稱加密算法(如3des)進(jìn)行加密的