單元 1.3.1 壓縮、加密和雜湊
有失真壓縮透過移除某些資料來減小檔案大小。原始檔案無法從壓縮版本中恢復,因為已刪除的資料丟失了。它通常用於聲音和影片檔案,因為更改不一定能被注意到。例如,在聲音檔案中,壓縮器可以剪掉高不可聽頻率,或者影片/影像檔案可以降低解析度或減少其顏色範圍。
無失真壓縮縮短檔案中的冗餘、重複資料,以減小其大小。原始檔案得以保留,並且始終可以完全恢復。
解釋有失真壓縮和無失真壓縮如何在點對點網路中的資料傳輸中使用。[5]
答案
允許對有失真壓縮(3)和無失真壓縮(2)進行任何有效的解釋,並提供它們在點對點網路中用於減小檔案大小和資料傳輸時間的示例。允許每個包含有效示例的要點加 1 分。(2)
主要有兩種方法
最著名的字典編碼器是 Lempel-Ziv-Welch(LZW)編碼器。它透過檢查檔案並建立一個字典來工作,例如
"湯姆·瓊斯在叢林中倖存了下來。湯姆在叢林中。"
句子中的每個單詞都可以分配一個數字
| 單詞 | ID 號碼 |
|---|---|
| 湯姆 | 1 |
| 瓊斯 | 2 |
| 倖存 | 3 |
| 那 | 4 |
| 叢林 | 5 |
| 是 | 6 |
| 在 | 7 |
這個長句子可以轉換為:"1234516745" 其中每個數字對應句子中的一個單詞。
這種編碼形式將相同資料片段的大型執行替換為單個數據值/數量。例如,如果影像中有一行 100 個紅色畫素,這可以編碼為 R100。該技術在 TIFF 和 BMP 檔案中被發現,並且如果資料以長序列形式存在,則效果最佳。
在嘗試減小檔案大小方面,無失真壓縮通常不如有失真壓縮有效。對於文字檔案或可執行程式等檔案,無失真壓縮是唯一的選擇,因為任何資料丟失都會破壞其功能。
加密是指以一種只有預期接收者才能解密的方式對資料進行加密的過程。主要有兩種型別:對稱和非對稱。
在對稱加密中,用於加密訊息的金鑰與用於解密它的金鑰相同。這要求傳送方和接收方都安全地儲存金鑰。它的編碼和解碼速度非常快,但是由於金鑰共享,因此更容易破解。
這種方法使用兩個單獨的金鑰 - 一個金鑰加密訊息,另一個金鑰解密訊息。一個公鑰為雙方都知道,但在實現加密演算法時,還會使用第二個相容的私鑰。要解密訊息,需要再次應用公鑰和私鑰,從而揭示訊息。這種方法要安全得多,但需要更多的處理能力。使用的金鑰通常是極大的隨機數,不可能被猜到。
非對稱加密利用了一些數學運算相對容易執行,但很難撤消的原理。例如,求指數模和將兩個素數相乘。
這些演算法有兩個用途 - 它們可以提供一種快速的方法來 生成記憶體地址 以便在資料庫中儲存記錄,以及用於儲存和檢查密碼。它們通常用於網路和線上交易。雜湊演算法是單向函式,因此將純文字值轉換為雜湊非常容易,但將雜湊轉換回純文字非常困難。這使得它適用於儲存密碼,但不適用於加密資料。
使用者輸入密碼後,密碼會被雜湊並存儲在伺服器上。在此之後,每次使用者嘗試登入時,雜湊演算法都會應用於輸入的密碼,並將結果與儲存的雜湊值進行比較。如果雜湊值相同,則輸入了正確的密碼,否則登入會被拒絕。雜湊值不能輕鬆轉換回其原始密碼,但駭客可以採用暴力破解技術來嘗試猜測原始密碼。
// e.g. User A enters: password123
sha256($password); // SHA-256 is a one-way hashing function
// ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f
為了進一步保護密碼,可以在雜湊過程中新增鹽值。鹽值是在密碼首次儲存時附加到密碼的隨機字串。該字串隨後被儲存起來,以便使用者再次輸入密碼時,可以將相同的鹽值附加到密碼上,並以類似於上述的方式執行檢查。這樣做的好處是,許多人使用諸如“password”之類的常用密碼,而透過新增鹽值,這些密碼不會都生成相同的雜湊值。如果有人獲得您的雜湊值,看到許多雜湊值相同,就會將他們必須嘗試的密碼範圍縮小到這些使用者的常用密碼,從而使他們能夠透過暴力破解方式繞過密碼。
// e.g. User B enters: password123
// Random salt: wuphAT=5renE
sha256(sha256($password).$salt);
// a3a0f0c8ce9208fa3d122778b437e0287c70fd829ad07f6672143d114cb244c2