相關(guān)文章:數(shù)字證書(shū)原理
SSL/TLS協(xié)議運(yùn)行機(jī)制的概述
一、常用的加密算法
1、對(duì)稱加密
對(duì)稱加密的意思就是,加密數(shù)據(jù)用的密鑰,跟解密數(shù)據(jù)用的密鑰是一樣的。<qq style="color:red">對(duì)稱加密的優(yōu)點(diǎn)在于加密、解密效率通常比較高</qq>。
常用加密算法有DES,3DES,AES等.
DES 數(shù)據(jù)加密標(biāo)準(zhǔn)(用的比較少,因?yàn)閺?qiáng)度不夠).
3DES 使用3個(gè)密鑰,對(duì)相同的數(shù)據(jù)執(zhí)行三次加密,強(qiáng)度增強(qiáng).
AES 高級(jí)加密標(biāo)準(zhǔn),目前美國(guó)國(guó)家安全局使用AES加密,蘋(píng)果的鑰匙串訪問(wèn)就是使用AES加密。
而對(duì)稱加密的模式最為常見(jiàn)的是兩種:ECB,CBC
ECB:<qq style="color:gray">加密文件會(huì)被分為若干個(gè)加密塊,每個(gè)塊都是獨(dú)立進(jìn)行加密,互不影響。所以,如果變動(dòng)數(shù)據(jù)中的某一個(gè)地方,加密之后其對(duì)應(yīng)得塊也會(huì)發(fā)生變化,缺點(diǎn)是一旦被破解某個(gè)模塊,就可以進(jìn)行推理,進(jìn)而有機(jī)會(huì)獲取到重要數(shù)據(jù)。</qq><p>
CBC:<qq style="color:gray">使用一個(gè)密鑰和一個(gè)初始化向量 (IV)對(duì)數(shù)據(jù)執(zhí)行加密轉(zhuǎn)換。加密文件同樣會(huì)被分為若干個(gè)加密塊,每個(gè)塊都依賴于上一個(gè)加密塊進(jìn)行加密,互相牽制。所以,如果變動(dòng)數(shù)據(jù)中的某一個(gè)地方,加密之后整體數(shù)據(jù)都會(huì)發(fā)生變化??梢杂行У乇WC密文的完整性</qq>
2、非對(duì)稱加密
與對(duì)稱加密算法不同,非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey);并且加密密鑰和解密密鑰是成對(duì)出現(xiàn)的。<qq style="color:red">通過(guò)公鑰加密的數(shù)據(jù),只能通過(guò)私鑰解開(kāi)。通過(guò)私鑰加密的數(shù)據(jù),只能通過(guò)公鑰解開(kāi)</qq>。常見(jiàn)的非對(duì)稱加密算法有RSA(加密,證書(shū)生成),DSA(數(shù)字簽名)
第三方代碼
非對(duì)稱加密算法對(duì)加密內(nèi)容的長(zhǎng)度有限制,不能超過(guò)公鑰長(zhǎng)度。比如現(xiàn)在常用的公鑰長(zhǎng)度是 2048 位,意味著待加密內(nèi)容不能超過(guò) 256 個(gè)字節(jié)。
3、HASH加密
Hash算法特別的地方在于它是一種單向算法,用戶可以通過(guò)Hash算法對(duì)目標(biāo)信息生成一段特定長(zhǎng)度(32個(gè)字符)的唯一的Hash值,卻不能通過(guò)這個(gè)Hash值重新獲得目標(biāo)信息。對(duì)用相同數(shù)據(jù),加密之后的密文相同。
常見(jiàn)的Hash算法有MD5和SHA。
//md5 處理
class func md5(_ string:String) -> String {
let str = string.cString(using: String.Encoding.utf8)
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let strLen = CUnsignedLongLong(string.lengthOfBytes(using: String.Encoding.utf8))
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_MD5(str!, CC_LONG(strLen), result)
let hash = NSMutableString()
for i in 0 ..< digestLen {
hash.appendFormat("%02X", result[i])
}
result.deinitialize()
return String(format: hash as String)
}
二、HTTPS原理
HTTPS是HTTP的安全版,HTTPS的安全基礎(chǔ)是SSL/TLS。<qq style="color:red">Https的作用:內(nèi)容加密,身份認(rèn)證 ,數(shù)據(jù)完整性 </qq>
https通信過(guò)程
對(duì)稱秘鑰用公鑰進(jìn)行加密,服務(wù)端用私鑰解密。

1、摘要算法
數(shù)字摘要是采用單項(xiàng)Hash函數(shù)將需要加密的明文“摘要”成一串固定長(zhǎng)度(128位)的密文,這一串密文又稱為數(shù)字指紋,它有固定的長(zhǎng)度,而且不同的明文摘要成密文,其結(jié)果總是不同的,而同樣的明文其摘要必定一致?!皵?shù)字摘要“是https能確保數(shù)據(jù)完整性和防篡改的根本原因。
2、數(shù)字簽名
將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息,然后用HASH函數(shù)對(duì)收到的原文產(chǎn)生一個(gè)摘要信息,與解密的摘要信息對(duì)比。如果相同,則說(shuō)明收到的信息是完整的,在傳輸過(guò)程中沒(méi)有被修改,否則說(shuō)明信息被修改過(guò).
數(shù)字簽名只能驗(yàn)證數(shù)據(jù)的完整性,數(shù)據(jù)本身是否加密不屬于數(shù)字簽名的控制范圍
3、數(shù)字證書(shū)
由一個(gè)權(quán)威的值得信賴的第三方機(jī)構(gòu)(一般是由政府審核并授權(quán)的機(jī)構(gòu))來(lái)統(tǒng)一對(duì)外發(fā)放主機(jī)機(jī)構(gòu)的公鑰。<p>
證書(shū)包含了頒發(fā)證書(shū)的機(jī)構(gòu)的名字 -- CA
證書(shū)的有效期
證書(shū)內(nèi)容本身的數(shù)字簽名(用CA私鑰加密,證書(shū)頒發(fā)機(jī)構(gòu)的)
證書(shū)持有者的公鑰
證書(shū)簽名用到的hash算法
證書(shū)驗(yàn)證:
1、Company在證書(shū)頒發(fā)機(jī)構(gòu)"SecureTrust CA"申請(qǐng)到這個(gè)證書(shū)后,我們把證書(shū)投入使用,我們?cè)谕ㄐ胚^(guò)程開(kāi)始時(shí)會(huì)把證書(shū)發(fā)給對(duì)方。
2、在操作系統(tǒng)中受信任的發(fā)布機(jī)構(gòu)的證書(shū)中去找"SecureTrust CA"的證書(shū),找不到證明證書(shū)可能有問(wèn)題,找到的話,就用證書(shū)發(fā)布機(jī)構(gòu)的根證書(shū)(一般是在操作系統(tǒng)中的)中的公鑰,去驗(yàn)證證書(shū)的數(shù)字簽名,確定證書(shū)的合法完整性。
3、然后就可以放心的使用證書(shū)的這個(gè)公鑰進(jìn)行通信了。
4、SSL/TLS
SSL協(xié)議在握手階段使用的是非對(duì)稱加密,在傳輸階段使用的是對(duì)稱加密。
