設想一下,這種場景,你處在一個狹小的房間裡,房間之中有一共有三個人,你是其中一個,你們之間被玻璃隔開,兩兩對視,現在給另外兩個人起個名字叫小紅、小明。你和他們通訊只能用寫字板來展示給對方(簡單起見,只能寫數字),也就是說每個人在寫字板上所寫的資訊,另外兩個人都會完完全全的看到,這是前提。
現在問題來了:如果你有些話只想寫給小紅,而不想讓小明知道,可不可能?
這個問題看起來是不可能的!因為你所寫的每一個字都他們都可以看到,但是現在有一個辦法,可以完成貌似完不成的任務,辦法如下:
首先,你和小紅之前認識,接觸過,你們倆之間有一個別人不知道的的約定,當我想給小紅寫一串數字的時候,我自己先在草稿紙上寫一遍,然後每個數字都加上4,構成“密文”,再把密文傳給小紅。比如我想給小紅傳“123”,那我就先在草稿紙上寫上“123”,然後把每一位數字加4,就變成“567”,然後我就把567發給小紅,小紅收到後,再把每一位數字減去4,就會得出我想要給她發的真實資訊,這樣,即使別人偷窺到了我們之間傳輸的“567”,也不會明白什麼意思。回到小屋裡來,雖然我寫給小紅的資訊,小明也會看到,但是我對我所寫的資訊進行了“加密”,而且只有小紅會“解密”,這樣,我就完成了和小紅之間的單獨對話,很巧妙,不是麼?
但是!這個方法有很大的侷限性,比如說小紅跟你之前不認識呢?既然不認識,你們之間壓根就沒有什麼別人不知道的約定,你再想傳給小紅就“密文”,她就看不懂了,你看,事情沒那麼簡單了吧?當然你也可以再次和小紅在小屋裡通過寫字板商量另一個約定,但是你們商量的任何約定,小明也會同樣看到,現在你就陷入了一個窘迫的處境,你無法完成和小紅的單獨對話了!但是,神奇的是,你仍然有辦法實現與小紅的單獨對話,神奇的辦法如下,強烈建議讀者到此自己想一想有何辦法,再往下看:
首先,先給大家介紹一樣東西——鎖!明白了吧?(什麼?不明白?那就繼續往下看)。我現在有一把鎖和鑰匙,我把自己的鎖傳送出去,這樣小明和小紅都能收到,然後我讓小紅自己規定一下我們之間的加密協議,寫在紙上,用鎖鎖起來,再給我發出來,雖然小紅髮出的加鎖的資訊小明同樣能收到,但是小明沒有鎖的鑰匙,就算得到小紅的資訊,也無法開啟鎖偷看小紅的真實資訊,但是我收到後我有鑰匙啊,我就能開啟,檢視小紅的加密規則,然後,我就可以光明正大的和小紅的用我們的加密規則進行通訊,小明只能咬牙切齒乾瞪眼了~0~,但是我們之前說只能通過螢幕傳遞資訊,通過鎖算是作弊,所以此法還是不通(小明暗喜)。可是還是有方法...
以上提供一個看起來很巧妙的方法來解決這種場景下的加密通話方案,但別高興太早,這要放在現實中,還好理解,可是我們是在用計算機,誰家的計算機可以傳送大鐵鎖啊!所以,還是得想個辦法,讓計算機間接實現這種方法,以便我們和小紅可以愉快的通話啊(--小明:為什麼要針對我!!),下面就引入計算機中的"鎖"和"鑰匙"——演算法,(--啥演算法? --不知道麼?自己先想想怎麼做!反正是演算法。)
18世紀,有個牛(bian)人(tai),叫尤拉,發現了一個定理,名叫尤拉定理(是不是很熟悉?沒錯,你們在高數中有過邂逅),而我們今天說的演算法,就是以它為核心(看,就算是歐兄去了天堂,但他的研究依然造福幾百年後的人們,可見之偉大啊)。