最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入講解HTTPS中的加密算法

 更新時(shí)間:2017年07月19日 09:54:10   作者:FOOFISH  
前段時(shí)間對(duì)接了好多外部接口,很多都是https的,還有證書,還有一些加密的。對(duì)這塊不是太了解,就查資料整理總結(jié)實(shí)踐下。下面這篇文章主要給大家深入的介紹了關(guān)于HTTPS中加密算法的相關(guān)資料,需要的朋友可以參考下。

HTTPS介紹

HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過(guò)TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。

用途兩種:一種是建立一個(gè)信息通道,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性,凡是使用了 https 的網(wǎng)站,都可以通過(guò)點(diǎn)擊瀏覽器地址欄的鎖頭標(biāo)志來(lái)查看網(wǎng)站認(rèn)證之后的真實(shí)信息,也可以通過(guò) CA 機(jī)構(gòu)頒發(fā)的安全簽章來(lái)查詢。

前言

密碼學(xué)在計(jì)算機(jī)科學(xué)中使用非常廣泛,HTTPS就是建立在密碼學(xué)基礎(chǔ)之上的一種安全的通信協(xié)議。HTTPS早在1994年由網(wǎng)景公司首次提出,而如今在眾多互聯(lián)網(wǎng)廠商的推廣之下HTTPS已經(jīng)被廣泛使用在各種大小網(wǎng)站中。在完全理解HTTPS之前,有必要弄清楚一些密碼學(xué)相關(guān)的概念,比如:明文、密文、密碼、密鑰、對(duì)稱加密、非對(duì)稱加密、摘要、數(shù)字簽名、數(shù)字證書。

密碼(cipher)

密碼學(xué)中的密碼(cipher)和我們?nèi)粘I钪兴f(shuō)的密碼不太一樣,計(jì)算機(jī)術(shù)語(yǔ)『密碼 cipher』是一種用于加密或者解密的算法,而我們?nèi)粘K褂玫摹好艽a password』是一種口令,它是用于認(rèn)證用途的一組文本字符串,這里我們要討論的是前者:cipher。

密鑰(key)

密鑰是一種參數(shù),它是在使用密碼(cipher)算法過(guò)程中輸入的參數(shù)。同一個(gè)明文在相同的密碼算法和不同的密鑰計(jì)算下會(huì)產(chǎn)生不同的密文。很多知名的密碼算法都是公開的,密鑰才是決定密文是否安全的重要參數(shù),通常密鑰越長(zhǎng),破解的難度越大,比如一個(gè)8位的密鑰最多有256種情況,使用窮舉法,能非常輕易的破解,知名的DES算法使用56位的密鑰,目前已經(jīng)不是一種安全的加密算法了,主要還是因?yàn)?6位的密鑰太短,在數(shù)小時(shí)內(nèi)就可以被破解。密鑰分為對(duì)稱密鑰與非對(duì)稱密鑰。

明文/密文

明文(plaintext)是加密之前的原始數(shù)據(jù),密文是通過(guò)密碼(cipher)運(yùn)算后得到的結(jié)果成為密文(ciphertext)

對(duì)稱密鑰

對(duì)稱密鑰(Symmetric-key algorithm)又稱為共享密鑰加密,對(duì)稱密鑰在加密和解密的過(guò)程中使用的密鑰是相同的,常見的對(duì)稱加密算法有DES、3DES、AES、RC5、RC6。對(duì)稱密鑰的優(yōu)點(diǎn)是計(jì)算速度快,但是他也有缺點(diǎn),密鑰需要在通訊的兩端共享,讓彼此知道密鑰是什么對(duì)方才能正確解密,如果所有客戶端都共享同一個(gè)密鑰,那么這個(gè)密鑰就像萬(wàn)能鑰匙一樣,可以憑借一個(gè)密鑰破解所有人的密文了,如果每個(gè)客戶端與服務(wù)端單獨(dú)維護(hù)一個(gè)密鑰,那么服務(wù)端需要管理的密鑰將是成千上萬(wàn),這會(huì)給服務(wù)端帶來(lái)噩夢(mèng)。下面就是一個(gè)簡(jiǎn)單的對(duì)稱加密,將明文加密成ASCII。

# 加密的方式:在ASCII的基礎(chǔ)上 + 密鑰的值

def encipher(plain_text, key):
 # 加密
 cipher_text = []
 for c in plain_text:
 cipher_text.append(str(ord(c) + key))

 return ' '.join(cipher_text)

def decipher(cipher_text, key):
 # 解密
 plain_text = []
 for c in cipher_text.split(" "):
 plain_text.append(chr(int(c)+key))
 return "".join(plain_text)


if __name__ == '__main__':
 print "cipher_text:", encipher("abcdef", 0)
 print "plain_text:", decipher("97 98 99 100 101 102", 0)

非對(duì)稱密鑰

非對(duì)稱密鑰(public-key cryptography),又稱為公開密鑰加密,服務(wù)端會(huì)生成一對(duì)密鑰,一個(gè)私鑰保存在服務(wù)端,僅自己知道,另一個(gè)是公鑰,公鑰可以自由發(fā)布供任何人使用。客戶端的明文通過(guò)公鑰加密后的密文需要用私鑰解密。非對(duì)稱密鑰在加密和解密的過(guò)程的使用的密鑰是不同的密鑰,加密和解密是不對(duì)稱的,所以稱之為非對(duì)稱加密。與對(duì)稱密鑰加密相比,非對(duì)稱加密無(wú)需在客戶端和服務(wù)端之間共享密鑰,只要私鑰不發(fā)給任何用戶,即使公鑰在網(wǎng)上被截獲,也無(wú)法被解密,僅有被竊取的公鑰是沒有任何用處的。常見的非對(duì)稱加密有RSA,非對(duì)稱加解密的過(guò)程:

  • 服務(wù)端生成配對(duì)的公鑰和私鑰
  • 私鑰保存在服務(wù)端,公鑰發(fā)送給客戶端
  • 客戶端使用公鑰加密明文傳輸給服務(wù)端
  • 服務(wù)端使用私鑰解密密文得到明文

數(shù)字簽名(Digital Signature)

數(shù)據(jù)在瀏覽器和服務(wù)器之間傳輸時(shí),有可能在傳輸過(guò)程中被冒充的盜賊把內(nèi)容替換了,那么如何保證數(shù)據(jù)是真實(shí)服務(wù)器發(fā)送的而不被調(diào)包呢,同時(shí)如何保證傳輸?shù)臄?shù)據(jù)沒有被人篡改呢,要解決這兩個(gè)問(wèn)題就必須用到數(shù)字簽名,數(shù)字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因?yàn)檫@是你專有的手跡,任何人是造不出來(lái)的。那么在計(jì)算機(jī)中的數(shù)字簽名怎么回事呢?數(shù)字簽名就是用于驗(yàn)證傳輸?shù)膬?nèi)容是不是真實(shí)服務(wù)器發(fā)送的數(shù)據(jù),發(fā)送的數(shù)據(jù)有沒有被篡改過(guò),它就干這兩件事,是非對(duì)稱加密的一種應(yīng)用場(chǎng)景。不過(guò)他是反過(guò)來(lái)用私鑰來(lái)加密,通過(guò)與之配對(duì)的公鑰來(lái)解密。

第一步:服務(wù)端把報(bào)文經(jīng)過(guò)Hash處理后生成摘要信息Digest,摘要信息使用私鑰private-key加密之后就生成簽名,服務(wù)器把簽名連同報(bào)文一起發(fā)送給客戶端。

第二步:客戶端接收到數(shù)據(jù)后,把簽名提取出來(lái)用public-key解密,如果能正常的解密出來(lái)Digest2,那么就能確認(rèn)是對(duì)方發(fā)的。

第三步:客戶端把報(bào)文Text提取出來(lái)做同樣的Hash處理,得到的摘要信息Digest1,再與之前解密出來(lái)的Digist2對(duì)比,如果兩者相等,就表示內(nèi)容沒有被篡改,否則內(nèi)容就是被人改過(guò)了。因?yàn)橹灰谋緝?nèi)容哪怕有任何一點(diǎn)點(diǎn)改動(dòng)都會(huì)Hash出一個(gè)完全不一樣的摘要信息出來(lái)。

數(shù)字證書(Certificate Authority)

數(shù)字證書簡(jiǎn)稱CA,它由權(quán)威機(jī)構(gòu)給某網(wǎng)站頒發(fā)的一種認(rèn)可憑證,這個(gè)憑證是被大家(瀏覽器)所認(rèn)可的,為什么需要用數(shù)字證書呢,難道有了數(shù)字簽名還不夠安全嗎?有這樣一種情況,就是瀏覽器無(wú)法確定所有的真實(shí)服務(wù)器是不是真的是真實(shí)的,舉一個(gè)簡(jiǎn)單的例子:A廠家給你們家安裝鎖,同時(shí)把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對(duì)的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來(lái)差不多的,但質(zhì)量差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那么這時(shí)候,你可以找質(zhì)檢部門來(lái)檢驗(yàn)一下,這套鎖是不是真的來(lái)自于A廠家,質(zhì)檢部門是權(quán)威機(jī)構(gòu),他說(shuō)的話是可以被公眾認(rèn)可的(呵呵)。

同樣的, 因?yàn)槿绻腥耍◤埲┯米约旱墓€把真實(shí)服務(wù)器發(fā)送給瀏覽器的公鑰替換了,于是張三用自己的私鑰執(zhí)行相同的步驟對(duì)文本Hash、數(shù)字簽名,最后得到的結(jié)果都沒什么問(wèn)題,但事實(shí)上瀏覽器看到的東西卻不是真實(shí)服務(wù)器給的,而是被張三從里到外(公鑰到私鑰)換了一通。那么如何保證你現(xiàn)在使用的公鑰就是真實(shí)服務(wù)器發(fā)給你的呢?我們就用數(shù)字證書來(lái)解決這個(gè)問(wèn)題。數(shù)字證書一般由數(shù)字證書認(rèn)證機(jī)構(gòu)(Certificate Authority)頒發(fā),證書里面包含了真實(shí)服務(wù)器的公鑰和網(wǎng)站的一些其他信息,數(shù)字證書機(jī)構(gòu)用自己的私鑰加密后發(fā)給瀏覽器,瀏覽器使用數(shù)字證書機(jī)構(gòu)的公鑰解密后得到真實(shí)服務(wù)器的公鑰。這個(gè)過(guò)程是建立在被大家所認(rèn)可的證書機(jī)構(gòu)之上得到的公鑰,所以這是一種安全的方式。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

參考:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

https://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86

https://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%99%E6%BA%96

https://zh.wikipedia.org/wiki/%E6%95%B8%E4%BD%8D%E7%B0%BD%E7%AB%A0

http://www.guokr.com/post/114121/

相關(guān)文章

  • sqoop如何指定pg庫(kù)的模式(方法詳解)

    sqoop如何指定pg庫(kù)的模式(方法詳解)

    sqoop是一個(gè)用來(lái)將hadoop中hdfs和關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)相互遷移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)(mysql、oracle等)中的數(shù)據(jù)導(dǎo)入到hadoop的hdfs中,也可以將hdfs的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫(kù)中,本文給大家介紹sqoop如何指定pg庫(kù)的模式,一起看看吧
    2022-01-01
  • git 多賬戶配置完整實(shí)現(xiàn)過(guò)程詳解

    git 多賬戶配置完整實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要為大家介紹了git 多賬戶配置完整實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 千萬(wàn)要避免的五種程序注釋方式小結(jié)

    千萬(wàn)要避免的五種程序注釋方式小結(jié)

    你是否有過(guò)復(fù)查程序時(shí)發(fā)現(xiàn)有些注釋毫無(wú)用處?程序注釋是為了提高代碼的可讀性,為了讓原作者以外的其他開發(fā)人員更容易理解這段程序。
    2011-10-10
  • VSCode自定義配色方案的實(shí)現(xiàn)

    VSCode自定義配色方案的實(shí)現(xiàn)

    這篇文章主要介紹了VSCode自定義配色方案的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Git如何實(shí)現(xiàn)撤銷提交(命令行+IDEA)

    Git如何實(shí)現(xiàn)撤銷提交(命令行+IDEA)

    這篇文章主要介紹了Git如何實(shí)現(xiàn)撤銷提交(命令行+IDEA)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • git遠(yuǎn)程操作異常:correct access rights問(wèn)題及解決

    git遠(yuǎn)程操作異常:correct access rights問(wèn)題及解決

    這篇文章主要介紹了git遠(yuǎn)程操作異常:correct access rights問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 值得收藏的9個(gè)提高代碼運(yùn)行效率的小技巧(推薦)

    值得收藏的9個(gè)提高代碼運(yùn)行效率的小技巧(推薦)

    本文給大家分享9個(gè)提高代碼運(yùn)行效率的小技巧(推薦),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-04-04
  • RocketMQ單結(jié)點(diǎn)安裝/Dashboard安裝過(guò)程分享

    RocketMQ單結(jié)點(diǎn)安裝/Dashboard安裝過(guò)程分享

    RocketMq屬于天生集群,需要同時(shí)啟動(dòng)nameServer和Broker進(jìn)行部署,在通過(guò)Dashboard進(jìn)行監(jiān)控,本文給大家介紹RocketMQ單結(jié)點(diǎn)安裝/Dashboard安裝過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • vscode使用restClient實(shí)現(xiàn)各種http請(qǐng)求的操作方法

    vscode使用restClient實(shí)現(xiàn)各種http請(qǐng)求的操作方法

    這篇文章主要介紹了vscode使用restClient實(shí)現(xiàn)各種http請(qǐng)求的操作方法,定義變量以及使用環(huán)境變量和返回?cái)?shù)據(jù)作為變量的操作代碼,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Jenkins?腳本命令行應(yīng)用小結(jié)

    Jenkins?腳本命令行應(yīng)用小結(jié)

    這篇文章主要介紹了Jenkins?腳本命令行應(yīng)用總結(jié),包括批量刪除Jenkins 項(xiàng)目構(gòu)建記錄,非多分支項(xiàng)目及分支項(xiàng)目,文章結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論

上蔡县| 腾冲县| 华宁县| 广宗县| 平乡县| 四川省| 巴楚县| 交城县| 神木县| 涿州市| 澜沧| 施甸县| 清徐县| 江华| 凌云县| 罗定市| 平顶山市| 兰坪| 怀来县| 察哈| 辽宁省| 安图县| 巴林右旗| 大庆市| 天祝| 北海市| 太湖县| 肃北| 京山县| 滦南县| 故城县| 墨竹工卡县| 泸定县| 上虞市| 富蕴县| 专栏| 老河口市| 方山县| 武穴市| 修文县| 周至县|