在計算機世界里,資訊安全始終占據著重要的地位,我們隨處就可以看到資訊安全的應用:
◆ 訪問網站時,使用https而不是http會使訪問者的安全性大大提升
◆ 下載檔案時,正規的網站都會提供MD5或類似的散列碼,供下載后校驗,以防止下載被篡改的檔案(有可能包含病毒或惡意代碼等)
◆ 網路銀行或者手機銀行的U盾或者電子證書等
◆ 區域鏈以及數字貨幣等
◆ ssh登錄時的免密設定
◆ github需要提交的公鑰等
以上種種無一不提示著密碼學知識的重要性,從本文開始,將沿著資料加解密的思路,將開發能夠用到的密碼學知識簡單地梳理下,密碼學的基本目的是使得雙方能夠在不安全的信道上進行安全的通信,在計算機網路中,假設有兩個人Alice和Bob,Alice想發送訊息給Bob,告訴他一個重要資訊,不能夠讓相關人知道,此時,Alice擔心資訊會被潛在的對手Oscar監聽,甚至篡改訊息內容來誤導Bob,即使收到資訊,Bob也對Alice發過來的訊息有疑慮,不知道訊息是否為Alice本人所發,訊息內容是否真實等等,假設Alice事先和Bob商量好一個密鑰(key),Alice通過密鑰將明文(plaintext)加密成密文,在網路中傳輸,Bob收到Alice傳過來的密文(ciphertext),用事先商量好的密鑰進行解密,得到明文,而潛在對手Oscar即使監聽到Alice發送的訊息,也是加密過的密文,由于不知道密鑰,所以無法知道真實的明文,
其基本程序如下圖所示:

為了達到這個目的,許多有智之士設計出各解決方案,其中移位密碼是最早,最簡單且有效的方法之一,有據可查的可追溯至古羅馬時代,尤利烏斯·愷撒曾經使用,移位密碼的思路是通過將明文中所使用的字母按照一定的位移個數進行“平移”來加密,為了簡化內容,如下圖所示,在這里我們只使用英文字母作為示例,

如上圖所示,最早期時,一般將字母平移3位,也就是a->d,b->e,c->f,這種最早平移3位的方案也叫愷撒密碼(Caesar Cipher),后來經過修正,平移位數也不一定是3位,可以是其它任何整數位,統稱為移位密碼(Shift Cipher),可以知道,愷撒密碼是移位密碼的一個特例(key=3時),現假設我們有明文P=china,密鑰K=3, 現要將其加密,根據上表,將字符P中的每個字母平移3位,得到如下情況:
c->f h->k i->l n->q a->d
至此,明文china就被轉換成了密文fklqd,移位密碼的解密也非常簡單,只要使用加密時用的密鑰進行反向平移操作,剛來的例子只要將密文反向平移3位就行,可得到如下:
f->c k->h l->i q->n d->a
在實際應用時,密鑰其實就是位移的個數,但這個資料規模在過去人類沒有計算機的時代,靠人類有限的腦力與經驗,確實很難猜出來,所以,移位密碼是非常經典的演算法,直到現在也可以用來進行簡單的加解密,一般人不明就里,也就很難猜出其中的規律,但是,在現代計算機高科技面前,這種密碼卻不堪一擊,只能算是玩具性質的益智游戲罷了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513646.html
標籤:Python
上一篇:阻塞佇列詳解
