首頁  >  文章  >  加密的強度主要取決於什麼

加密的強度主要取決於什麼

醉折花枝作酒筹
醉折花枝作酒筹原創
2021-06-25 11:28:0120584瀏覽

加密的強度主要取決於加密方式和金鑰複雜程度。密鑰是一種參數,它是在使用密碼演算法過程中輸入的參數,是決定密文是否安全的重要參數,通常密鑰越長,破解的難度越大。

加密的強度主要取決於什麼

本教學操作環境:windows7系統、Dell G3電腦。

加密的強度主要取決於加密方式和金鑰複雜程度。

金鑰

金鑰是一種參數,它是在使用密碼(cipher)演算法過程中輸入的參數。同一個明文在相同的密碼演算法和不同的金鑰計算下會產生不同的密文。許多知名的密碼演算法都是公開的,密鑰才是決定密文是否安全的重要參數,通常密鑰越長,破解的難度越大,例如一個8位元的密鑰最多有256種情況,使用窮舉法,能非常輕易的破解,知名的DES演算法使用56位元的金鑰,目前已經不是一種安全的加密演算法了,主要還是因為56位元的金鑰太短,在數小時內就可以被破解。密鑰分為對稱密鑰與非對稱密鑰。

明文/密文

明文(plaintext)是加密之前的原始數據,密文是透過密碼(cipher)運算後得到的結果變成密文(ciphertext)

對稱金鑰

對稱金鑰(Symmetric-key algorithm)又稱為共享金鑰加密,對稱金鑰在加密和解密的過程中使用的金鑰是相同的,常見的對稱加密演算法有DES、3DES、AES、RC5、RC6。對稱金鑰的優點是計算速度快,但是他也有缺點,金鑰需要在通訊的兩端共享,讓彼此知道金鑰是什麼對方才能正確解密,如果所有客戶端都共享同一個金鑰,那麼這個密鑰就像萬能鑰匙一樣,可以憑藉一個密鑰破解所有人的密文了,如果每個客戶端與服務端單獨維護一個密鑰,那麼服務端需要管理的密鑰將是成千上萬,這會給服務端帶來噩夢。

下面就是一個簡單的對稱加密,將明文加密成ASCII。

# 加密的方式:在ASCII的基础上 + 密钥的值
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)

非對稱金鑰

非對稱金鑰(public-key cryptography),又稱為公開金鑰加密,服務端會產生一對金鑰,一個私鑰保存在服務端,僅自己知道,另一個是公鑰,公鑰可以自由發布供任何人使用。

客戶端的明文透過公鑰加密後的密文需要用私鑰解密。非對稱金鑰在加密和解密的過程的使用的金鑰是不同的金鑰,加密和解密是不對稱的,所以稱之為非對稱加密。

與對稱金鑰加密相比,非對稱加密無需在客戶端和服務端之間共享金鑰,只要私鑰不發給任何用戶,即使公鑰在網路上被截獲,也無法被解密,只有被竊取的公鑰是沒有任何用處的。常見的非對稱加密有RSA,非對稱加解密的過程:

  • 服務端產生配對的公鑰與私鑰

  • 私鑰保存在服務端,公鑰發送給客戶端

  • 客戶端使用公鑰加密明文傳輸給服務端

  • 服務端使用私鑰解密密文得到明文

數位簽章

資料在瀏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把內容替換了,那麼如何保證數據是真實伺服器發送的而不被調包呢,同時如何保證傳輸的數據沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合約書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手跡,任何人是造不出來的。

那麼在計算機中的數位簽章怎麼回事呢?數位簽章就是用來驗證傳輸的內容是不是真實伺服器發送的數據,發送的資料有沒有被竄改過,它就乾這兩件事,是不對稱加密的一種應用場景。不過他是反過來用私鑰來加密,透過與之配對的公鑰來解密。

第一步:服務端把封包經過Hash處理後產生摘要資訊Digest,摘要資訊使用私鑰private-key加密之後就產生簽名,伺服器把簽章連同封包一起傳送給客戶端。

第二步:客戶端接收到資料後,把簽章提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能確認是對方發的。

第三步:客戶端把報文Text提取出來做同樣的Hash處理,得到的摘要資訊Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示內容沒有被篡改,否則內容就是被人改過了。因為只要文字內容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要訊息出來。

數位憑證

數位憑證簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的,為什麼需要用數位憑證呢,難道有了數位簽章還不夠安全嗎?

有這樣一種情況,就是瀏覽器無法確定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠商給你們家安裝鎖,同時把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但品質差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自於A廠家,質檢部門是權威機構,他說的話是可以被大眾認可的(呵呵)。

同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給瀏覽器的公鑰替換了,於是張三用自己的私鑰執行相同的步驟對文本Hash、數位簽名,最後得到的結果都沒什麼問題,但事實上瀏覽器看到的東西卻不是真實伺服器給的,而是被張三從裡到外(公鑰到私鑰)換了一通。

那麼如何保證你現在使用的公鑰就是真實伺服器傳給你的呢?我們就用數位證書來解決這個問題。數位證書一般由數位證書認證機構(Certificate Authority)頒發,證書裡麵包含了真實伺服器的公鑰和網站的一些其他信息,數位證書機構用自己的私鑰加密後發給瀏覽器,瀏覽器使用數位證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的憑證機構之上所得到的公鑰,所以這是一種安全的方式。

更多電腦相關知識,請造訪常見問題欄位!

以上是加密的強度主要取決於什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn