編碼、加密又碌、Hash九昧、序列化绊袋、字符集

密碼學(xué)

古典密碼學(xué) : 起源于古代戰(zhàn)爭,為了防止書信被截獲后重要信息泄漏铸鹰,人們開始對書信進(jìn)行加密

  • 移位式加密 : 如密碼棒癌别,是用布條纏繞在木棒上的方式來對書信進(jìn)行加密

    加密算法 : 纏繞木棒后書寫

    密鑰 : 木棒的尺寸

  • 替換式加密 : 按規(guī)則使用不同的文字替換原先的文字來進(jìn)行加密

    碼表 :

    原始字符 : ABCDEFGHIJKLMNOPQRSTUVWXYZ

    加密字符 : BCDEFGHIJKLMNOPQRSTUVWXYZA

    原始書信 : I love you

    加密書信 : J mpwf zpv

    解讀后 : I love you

    加密算法 : 替換文字

    密鑰 : 替換的碼表

現(xiàn)代密碼學(xué) :

不只可以用于文字加密,還可以加密任何二進(jìn)制數(shù)據(jù)

非對稱加密的出現(xiàn)使得密碼學(xué)有了更廣泛的用途 : 數(shù)字簽名

  • 對稱加密 : 通信雙方使用同一個(gè)密鑰掉奄,使用加密算法配合密鑰來進(jìn)行加密规个,解密時(shí)使用加密過程的完全逆過程配合密鑰來進(jìn)行解密凤薛。


    對稱加密模型.png

    簡化模式即上面古典密碼學(xué)中替換式加密的模型 : 對文字進(jìn)行規(guī)則化替換來加密姓建,對密文進(jìn)行逆向的規(guī)則化替換來解密。

    • 經(jīng)典算法

      DES(56位密鑰缤苫,密鑰太短而逐漸被棄用)速兔、AES(128位、192位活玲、256位密鑰涣狗,現(xiàn)在最流行)

    • 對稱加密作用

      加密通信,防止信息在不安全網(wǎng)絡(luò)上被截獲后舒憾,信息被人讀取或篡改

    • 對稱加密(如AES)的破解

      破解思路

      • 拿到一組或多組原文-密文對
      • 設(shè)法找到一個(gè)密鑰镀钓,這個(gè)密鑰可以將這些原文-密文對中的原文加密為密文,以及將密文解密為原文的組合镀迂,即為成功破解

      反破解

      一種優(yōu)秀的對稱加密算法的標(biāo)準(zhǔn)是丁溅,讓破解者找不到比窮舉法(暴力破解法)更有效的破解手段,并且窮舉法的時(shí)間足夠長(例如幾千年)

    • 對稱加密的缺點(diǎn)

      密鑰泄漏 : 不能在不安全網(wǎng)絡(luò)上傳輸密鑰探遵,一旦密鑰泄漏則加密通信失敗

  • 非對稱加密 : 使用公鑰對數(shù)據(jù)進(jìn)行加密得到密文窟赏;使用私鑰對數(shù)據(jù)進(jìn)行解密得到原數(shù)據(jù)


    非對稱加密模型.png

    非對稱加密的使用的是復(fù)雜的數(shù)學(xué)技巧,在古典密碼學(xué)中沒有對應(yīng)的模型箱季。

    使用非對稱加密通信涯穷,可以在不可信網(wǎng)絡(luò)上將雙方的公鑰傳給對方,然后在發(fā)消息前分別對消息使用使用對方的公鑰進(jìn)行加密和使用自己的私鑰來簽名藏雏,做到不可靠網(wǎng)絡(luò)上的可靠密鑰傳播及加密通信拷况。


    非對稱加密通信.png

    由于私鑰和公鑰互相可解,因此非對稱加密還可以應(yīng)用于數(shù)字簽名技術(shù)掘殴。


    簽名與驗(yàn)證.png

    通常會(huì)對原數(shù)據(jù)hash以后對hash簽名蝠嘉,然后附加在原數(shù)據(jù)的后面作為簽名,這是為了讓數(shù)據(jù)更小杯巨。


    完整簽名與驗(yàn)證.png
  • 經(jīng)典算法

    RSA(可用于加密和簽名)蚤告、DSA(僅用于簽名,但速度更快)

  • 對稱加密作用

    加密通信服爷,防止信息在不安全網(wǎng)絡(luò)上被截獲后杜恰,信息被人讀取或篡改

  • 非對稱加密(如RSA获诈、ECDSA)的破解

    破解思路

    • 和對稱加密的不同之處在于,非對稱加密的公鑰很容易獲得心褐,因此制造原文-密文對是沒有困難的事
    • 所以非對稱加密的關(guān)鍵只在于舔涎,如何找到一個(gè)正確的私鑰,可以解密所有經(jīng)過公鑰加密過的密文逗爹,找到這樣的私鑰即為成功破解
    • 由于非對稱加密的自身特性亡嫌,怎樣通過公鑰來推斷出私鑰通常是一種思路(如RSA),但往往最佳手段依然是窮舉法掘而,只是和對稱加密破解的區(qū)別在于挟冠,對稱加密破解是不斷嘗試自己的新密鑰是否可以將自己拿到的原文-密文對進(jìn)行加密和解密,而非對稱加密是不斷嘗試自己的新私鑰是否和公鑰互相可解袍睡。

    反破解

    和對稱加密一樣知染,非對稱加密算法優(yōu)秀的的標(biāo)準(zhǔn)同樣在于,讓破解者找不到比窮舉法更有效的破解手段斑胜,并且窮舉法的破解時(shí)間足夠長

  • 對稱加密的優(yōu)缺點(diǎn)

    • 優(yōu)點(diǎn) : 可以在不安全網(wǎng)絡(luò)上傳輸密鑰
    • 缺點(diǎn) : 計(jì)算復(fù)雜控淡,因此性能相比對稱加密差很多
密碼學(xué)密鑰與登錄密碼
  • 密鑰 (key)
    • 場景 : 用于加密和解密
    • 目的 : 保證數(shù)據(jù)被盜時(shí)不會(huì)被人讀懂內(nèi)容
    • 焦點(diǎn) : 數(shù)據(jù)
  • 登錄密碼(password)
    • 用戶進(jìn)入網(wǎng)站或游戲前的身份驗(yàn)證
    • 目的 : 數(shù)據(jù)服務(wù)方或應(yīng)用服務(wù)方對賬戶擁有者數(shù)據(jù)的保護(hù),保證【你是你】的時(shí)候才提供權(quán)限
    • 焦點(diǎn) : 身份
Base64

將二進(jìn)數(shù)數(shù)據(jù)轉(zhuǎn)換成由64個(gè)字符組成的字符串的編碼算法

  • 什么是二進(jìn)制數(shù)據(jù)

    • 廣義 : 所有計(jì)算機(jī)數(shù)據(jù)都是二進(jìn)制數(shù)據(jù)
    • 狹義 : 非文本數(shù)據(jù)即二進(jìn)制數(shù)據(jù)
  • 算法

    將原數(shù)據(jù)每6位對應(yīng)成base64索引表中的一個(gè)字符編排成一個(gè)字符串(每個(gè)字符8位)

  • Base64索引表


    base64索引表.png

    編碼實(shí)例 : 把 [Man] 進(jìn)行base64編碼


    Man-base64編碼.png

    編碼實(shí)例 : base64的末尾補(bǔ)足


    base64的末尾補(bǔ)足.png
  • Base64的用途

    • 將二進(jìn)制數(shù)據(jù)擴(kuò)充了儲(chǔ)存和傳輸途徑(例如可以把數(shù)據(jù)保存到文本文件止潘、可以通過聊天對話框或短信形式發(fā)送二進(jìn)制數(shù)據(jù)掺炭、可以在URL中加入簡單的二進(jìn)制數(shù)據(jù))
    • 普通的字符串在經(jīng)過base64的編碼后的結(jié)果會(huì)變得肉眼不可讀,因此可以適用于一定條件下的防偷窺(較少用)
  • Base64的缺點(diǎn)

    因?yàn)樽陨淼脑恚?位變8位)凭戴,因此每次base64編碼之后涧狮,數(shù)據(jù)都會(huì)增大約1/3,所以會(huì)影響存儲(chǔ)和傳輸性能簇宽。

  • Base64加密圖片傳輸是否更安全和高效

    并不是勋篓。首先,Base64并不是加密魏割;另外Base64會(huì)導(dǎo)致數(shù)據(jù)增大約1/3譬嚣,降低網(wǎng)絡(luò)性能,增大用戶流量開銷钞它,是畫蛇添足的手段

    Base64對圖片進(jìn)行編碼的用途在于拜银,有時(shí)需要使用文本形式來傳輸圖片。除此之外遭垛,完全沒必要使用Base64來對圖片進(jìn)行額外處理

  • 變種Base58

    比特幣使用的編碼方式尼桶,去掉了Base64中的數(shù)字“0”,字母大寫“O”,字母大寫“I”和字母小寫“l(fā)”,以及“+”和“/”符合锯仪,用于比特幣地址的表示

    Base58對于Base64的改動(dòng)泵督,主要目的在于用戶的便攜性。由于去掉了難以區(qū)分的字符庶喜,使得Base58對于人工抄寫 更加方便小腊。另外救鲤,去掉了“+”和“/”號后也讓大多數(shù)的軟件可以方便雙擊選取

URL使用的百分號編碼

在URL的字符串中,對一些不用于特殊用途的保留字符秩冈,使用百分號“%”為前綴進(jìn)行單獨(dú)編碼本缠,以避免出現(xiàn)解析錯(cuò)誤。

例如入问,要在 http://hencoder.com/users 后面添加查詢字符串丹锹,查詢 name 為隱匿&偉大 的用戶,如果直接寫成 http://hencoder.com/user/?name=隱匿&偉大芬失,“&”符號就會(huì)被解析為分隔符號楣黍,因此需要對它進(jìn)行轉(zhuǎn)碼,轉(zhuǎn)碼后的 URL 為 http://hencoder.com/user/?name=隱匿%26偉大

這種編碼僅用于URL麸折,目的是避免解析錯(cuò)誤的出現(xiàn)

壓縮與解壓縮
  • 含義

    • 壓縮 : 將數(shù)據(jù)使用更具有存儲(chǔ)優(yōu)勢的編碼算法進(jìn)行編碼
    • 壓縮 : 將壓縮數(shù)據(jù)解碼還原成原來的形式锡凝,以方便使用
  • 目的 : 減小數(shù)據(jù)占用的存儲(chǔ)空間

  • 粗暴算法舉例

    將下面文本內(nèi)容壓縮

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
    

    使用某種算法壓縮后的數(shù)據(jù)為:

    compress:a:1062;b:105
    

    具體的壓縮場景有很多粘昨,因此壓縮算法也會(huì)復(fù)雜得多垢啼,上面只是一個(gè)原型算法

  • 壓縮是編碼嗎

    是。所謂編碼即把數(shù)據(jù)從一種形式轉(zhuǎn)換成另一種形式张肾。壓縮過程屬于編碼過程芭析,解壓縮過程屬于解碼過程

  • 常見壓縮算法

    DEFLATE、JPEG吞瞪、MP3等

圖片與音頻馁启、視頻編解碼
  • 含義

    將圖片、音頻芍秆、視頻數(shù)據(jù)通過編碼形式來轉(zhuǎn)換成存檔形式(編碼)惯疙,以及從存檔形式轉(zhuǎn)換回來(解碼)

  • 目的 : 存儲(chǔ)和壓縮媒體數(shù)據(jù)(大多數(shù)媒體編碼算法會(huì)壓縮數(shù)據(jù),但不是全部)

  • 圖片壓縮粗暴算法舉例

    一張純白(白色的16進(jìn)制數(shù)值為0xffffff)64 * 64 的不透明像素圖片,原始數(shù)據(jù)格式大致為 :

    width:64;height:64;ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff.......f
    fffff
    

    使用某種算法壓縮后的數(shù)據(jù)為:

    width:64;height:64;ffffff:[0,0]-[63,63]
    

    音頻與視頻的編碼與上面的圖片編碼同理

序列化

把數(shù)據(jù)對象(一般是內(nèi)存中的妖啥,如JVM中的對象)轉(zhuǎn)換成字節(jié)序列的過程霉颠。對象在程序內(nèi)存中的存放形式是散亂的(存放在不同的內(nèi)存區(qū)域,并且由引用來進(jìn)行連接)荆虱,通過序列化可以把內(nèi)存中的對象轉(zhuǎn)換成一個(gè)字節(jié)序列蒿偎,從而使用byte[]等形式進(jìn)行本地存儲(chǔ)、網(wǎng)絡(luò)傳輸怀读,在需要的時(shí)候重新組裝(反序列化)來使用

  • 目的 : 讓內(nèi)存中的對象可以被儲(chǔ)存和傳輸
  • 序列化是編碼嗎 : 不是
  • 和編碼的區(qū)別 : 編碼是把數(shù)據(jù)由一種數(shù)據(jù)格式轉(zhuǎn)換成另一種數(shù)據(jù)格式诉位,而序列化是把數(shù)據(jù)由內(nèi)存中的對象(而不是某種具體的格式)轉(zhuǎn)換成字節(jié)序列
Hash
  • 定義 : 把任意數(shù)據(jù)轉(zhuǎn)換成指定大小范圍(通常很小,例如256字節(jié)以內(nèi))的數(shù)據(jù)

  • 作用 : 相當(dāng)于從數(shù)據(jù)中提出摘要信息菜枷,因此最主要用途是數(shù)字指紋

  • Hash的實(shí)際用途

    • 唯一性驗(yàn)證苍糠,例如java中的hashCode()方法

      如何重寫hashCode()方法 : 把equal()方法中每個(gè)用于判斷相等的變量都放進(jìn)hashCode()中,一期生成一個(gè)盡量不會(huì)碰裝的整數(shù)即可

      為什么每次重寫equal()方法都需要啤誊,因?yàn)橐研碌呐袛鄺l件放進(jìn)hashCode()

    • 數(shù)據(jù)完整性驗(yàn)證

      從網(wǎng)絡(luò)上下載文件后岳瞭,通過比對文件的hash值(MD5歹袁、SHA1),可以確認(rèn)下載的文件是否有損壞寝优。如果下載的文件hash值和文件提供方給出的hash值一直条舔,則證明下載的文件是完好無損的

    • 快速查找 : HashMap

    • 隱私保護(hù)

      當(dāng)重要數(shù)據(jù)必須暴露的時(shí)候,有時(shí)可以選擇暴露它的hash值(例如MD5)乏矾,以保證原數(shù)據(jù)的安全孟抗。例如網(wǎng)站登錄時(shí)可以只保存用戶密碼的hash值,每次登錄驗(yàn)證時(shí)只需要將輸入的密碼的hash值和數(shù)據(jù)庫中保存的hash值作對比就好钻心,網(wǎng)站無需知道用戶的密碼凄硼。這樣,當(dāng)網(wǎng)站數(shù)據(jù)失竊時(shí)捷沸,用戶不會(huì)因?yàn)樽约旱拿艽a被盜導(dǎo)致其它網(wǎng)站的安全也收到威脅摊沉。

      注意 : 這不屬于加密

  • Hash是編碼嗎

    不是,Hash是單向操作痒给,往往是不可逆的说墨,無法進(jìn)行逆向恢復(fù)操作,所以Hash不屬于編碼

  • Hash是加密嗎

    不是苍柏,Hash是單向操作尼斧,無法進(jìn)行逆向恢復(fù)操作,所以Hash不屬于加密(記住试吁,MD5不是加密)

字符集 : 一個(gè)由整數(shù)向現(xiàn)實(shí)世界中的文字符號的Map

分支 :

  • ASCII : 128個(gè)字符棺棵,1字節(jié)
  • ISO-8859-1 : 對ASCII 進(jìn)行擴(kuò)充,1字節(jié)
  • Unicode : 13萬個(gè)字符熄捍,多字節(jié)
    • UTF-8 : Unicode的編碼分支
    • UTF-16 : Unicode的編碼分支
  • GBK/GB2312/GB18030 : 中國自研標(biāo)準(zhǔn)烛恤,多字節(jié),字符集 + 編碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末余耽,一起剝皮案震驚了整個(gè)濱河市缚柏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宾添,老刑警劉巖船惨,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缕陕,居然都是意外死亡粱锐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門扛邑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怜浅,“玉大人,你說我怎么就攤上這事《褡” “怎么了搀暑?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跨琳。 經(jīng)常有香客問我自点,道長,這世上最難降的妖魔是什么脉让? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任桂敛,我火速辦了婚禮,結(jié)果婚禮上溅潜,老公的妹妹穿的比我還像新娘术唬。我一直安慰自己,他們只是感情好滚澜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布粗仓。 她就那樣靜靜地躺著,像睡著了一般设捐。 火紅的嫁衣襯著肌膚如雪借浊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天挡育,我揣著相機(jī)與錄音巴碗,去河邊找鬼朴爬。 笑死即寒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的召噩。 我是一名探鬼主播母赵,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼具滴!你這毒婦竟也來了凹嘲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤构韵,失蹤者是張志新(化名)和其女友劉穎周蹭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疲恢,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凶朗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了显拳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚愤。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宛畦,到底是詐尸還是另有隱情瘸洛,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布次和,位于F島的核電站反肋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏踏施。R本人自食惡果不足惜囚玫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望读规。 院中可真熱鬧抓督,春花似錦、人聲如沸束亏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍遍。三九已至定铜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怕敬,已是汗流浹背揣炕。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留东跪,地道東北人畸陡。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像虽填,于是被迫代替她去往敵國和親丁恭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容