日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何区分加密、压缩、编码?

發布時間:2024/1/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何区分加密、压缩、编码? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文標題:How to distinguish between encryption, compression, and encoding?
原文作者: M157q
譯文出自:云子可信官方論壇
本文永久鏈接:https://bbs.cloudtrust.com.cn/thread-349-1-1.html
譯者:云子可信漢化組

前言

base64加密?base64壓縮?base64編碼?傻傻分不清?
究竟:

  • 加密(Encrypt)
  • 壓縮(Compress)
  • 編碼(Encode)

到底有什么差別?明明不管是中文還是英文,這3個詞長得一點都不像,那到底為什么很多人會把這3種東西都當成加密呢?主要是因為透過這3種方式處理過后的資料,都會長的跟原本不一樣,一般人無法直接辨別,就覺得是被加密處理過的密文天書。然而,并不是變成人看不懂的東西就叫作「加密」。

如果誤用的話,很有可能你自以為加密了的東西,
實際上并沒有經過加密處理,隨隨便便就可以被懂其中差異的人拿到你寶貴的原始文字(最有可能的就是你的密碼啦)。以下就來簡單說明這3種東西各自的特性,會特別拿base64來說,希望能夠端正一下視聽。

加密(Encryption)

特性
首先得產生一個新的字串作為密鑰,也就是一把鑰匙。

原文與密鑰作為加密演算法的輸入,得到的輸出即為加密過后的密文。

可以想像成,加密演算法幫你打造出你給它的這把密鑰才可以開啟的寶箱,幫你把原文放入寶箱后,用這把密鑰上鎖,上鎖后的寶盒就是密文,看不到里面的東西是什么。
這種只有一把鑰匙的加密演算法被稱為對稱式加密(Symmetric Encryption)。

問題也很明顯,要是你沒有保管好你的鑰匙,或者你的鑰匙構造太簡單被人打造出一模一樣的鑰匙,別人就可以打開寶箱,拿到內容物。

比如說你的密鑰是一個叫作"5566" 的字串,因為太好猜了,所以很容易被解密回來。
這也是為什么通常在生成密鑰的時候會建議長度愈長愈好,尤其現在電腦的運算能力愈來愈強,以往透過程式一個一個暴力猜測密鑰的方式,在相同單位時間內可以猜的數量變多了,密鑰長度太短的話,很容易就被猜到。

因為對稱式加密的安全性以及在實際應用上不夠理想,于是乎,出現了安全性更高,應用范圍更廣的非對稱式加密(Asymmetric Encryption)。

非對稱式加密演算法會有兩把鑰匙,一把稱做公鑰(可以公開),另一把稱做私鑰(自己要藏好)。

非對稱式加密除了可以做到加密以外,還可以生成數位簽章,確認密文的傳送方身份真的是本人,這篇不會細談。

但這并不代表對稱式加密就沒有人用,兩者各有各的優缺點,所以實際應用上通常都是視情況而定,常常會有兩者一起使用的情形。

常見演算法

  • 對稱式:DES, 3DES, AES
  • 非對稱式:RSA, DSA, ECC

結論

  • 沒有這把鑰匙(無論是拿到或猜到)就無法得知真正的訊息。
  • 使用base64 的時候不需要密鑰,而且任何人編碼的base64訊息,任何人都可以經過base64 解碼回來,所以base64 不是加密。

壓縮(Compression)

特性

輸入(通常是檔案)經過壓縮演算法后得到的輸出,大小比輸入來得小。
根據有無失真又區分為非破壞性(無損)壓縮與破壞性(有損)壓縮:

  • 無損壓縮:無失真、壓縮率沒辦法到太高,通常用在文件檔案這種不能缺少原始資料的東西。
  • 有損壓縮:失真、壓縮率可以比較高,通常用在圖片、視訊、音訊,因為可以去掉人眼或人耳無法辨認出差異的部份,降低檔案大小可以有效提升傳輸時的效率。

常見演算法
zip, gzip, rar, 7zip, jpg, mp3, mp4, Huffman coding

結論

  • 沒有讓輸出比輸入小的演算法就不是壓縮。
  • 經過base64 編碼后得到的結果,實際上會比原檔案多三分之一左右,所以base64 不是壓縮。
  • base64 使用64 個可顯示的ASCII 字元來表示二進位資料。
  • 2^6 = 64,也就是一個base64單元表示6位元,即用1個ASCII字元(8 bits),表示6 bits資料,比例為4:3,也就大概多了1/3出來。

那為什么很多地方會提到在網頁上用base64 表示圖片可以加速?

主要是因為把圖片直接以base64 字串的形式呈現在網頁上的話,就不需要額外再發request 去要圖片。但因為base64 會把檔案變大不少,所以很多人會先把圖片經過gzip 壓縮后,再編碼成base64 字串。

編碼(Encoding)

編碼牽涉的范圍非常廣包含了:字元編碼(Character Encoding)、音訊編碼(Audio Encoding)、視訊編碼(Video Encoding)……等等,所以在這篇文章不會仔細講。 其實廣義上來說,上述提到的加密與壓縮都算是編碼的其中一種, 但這里就把上述兩個排除。

特性

  • 將原文轉換成另外一種表達方式。
  • 不需要密鑰,只要知道你用哪個編碼演算法,任何人都可以解碼。
  • 這也是單純編碼被拿來誤用成加密演算法最危險的地方,因為完全不需要花時間猜密鑰。

不同的編碼演算法有不同的特性

  • 錯誤偵測(Error Detection)
    檢查訊息在經過傳送后是否已經改變。
  • 錯誤校正(Error Correction)
    自動修正在經過傳送后錯誤的內容。
    方便資料進行傳輸
    以不同的形式表示相同的資料。
    例如: base64 就把二進位的資料用ASCII 來表示。

常見演算法
base64, urlencode, hamming code,

結論

  • 有密鑰:加密、
  • 輸出比輸入小:壓縮
  • 其他:編碼

總結

以上是生活随笔為你收集整理的如何区分加密、压缩、编码?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。