精華區beta NAOE-86 關於我們 聯絡資訊
花一個下午寫了一個編碼的小程式, 基本上就是照著一本書上提的 Vigenere Cipher 去做, 所以也沒什麼困難的, 雖然是滿古老的一種編碼法, 很早就有相應的破解法, 不過對一般人而言, 要破解可能不大容易, 所以還是可以拿來玩玩。 這個方法,簡單來說,就是多重的字母取代, 最簡單的字母取代法如 atbash , 就是用 alphbet 上最後一個字母取代第一個字母, 倒數第二個取代第二個, 所以就是用z代替a,a代替z,y代替b,x代替c,以此類推, 而它的名字 atbash --- aleph tav bet shin, 正是希伯來文中第一、最後、第二跟倒數第二個字母。 之後又有單向字母取代法,不過我懶得解釋, 而且它也包括在 Vigenere Cipher 裡, 就像是一般積分跟多重積分的關係一樣。 Vigenere Cipher 的字母取代是照著一個表來進行的, abcdefghijklmnopqrstuvwxyz bcdefghijklmnopqrstuvwxyza cdefghijklmnopqrstuvwxyzab .......(以下省略) 這個表每往下一列, 就把第一個字母調到最後, 所以總共有 26 列, 在做字母取代時, 必須設定一個鑰匙, 在加密跟解密時都要有 假設是 bac 好了, 如果需要加密的文件是這樣一句話:in god we trust. 那麼第一個字就用開頭是 b 的這一列去取代,所以是 j, 第二個字用 a,第三個字用 c,第四個字則又回到 b, 所以 in god we trust 就變成 jn hof wg ttvsv (bacbacbacbacbac) 因為鑰匙的第二個字是 a, 所以有些字會跟原文一樣, 解密時步驟跟加密差不多, 就是照著一個一個換回來, 所以樂觀地說, 文件的內容只有擁有鑰匙(在這裡是 bac)的人知道, 比起一本厚厚的密碼本, 顯然是方便得多, 在安全性及方便性上算是還不錯。 當然這把鑰匙可長可短, 甚至有人拿獨立宣言全文來當鑰匙, 如果沒有電腦,很顯然的, 這是只有笨蛋才會幹的事。 程式放在 pc85 ftp/upload1/vigenere/ 請自行 compile, 或是用 debug 裡的執行檔試試看。 因為是寫好玩的, 也不大注重技巧, 所以請不要拿來做各種測試, 它絕對會當掉, 並且讓你的螢幕變成藍色。 使用時一開始是問要加密(選項1)還是解密(選項2)? 然後打進輸入檔名及輸出檔名, 不用打路徑,我還沒那麼高段, (當然你得先把想加密或解密的文件寫成一個檔案, 放到程式所在的資料夾裡。) 檔名和密碼的長度限制在 15 個字元, 要改的話到程式的宣告區改就行了, 密碼只能用小寫的英文字母(好像是廢話?), 另外文字檔請在最後加上一個 % 的標記, 密文檔請加上 ? 的標記, 因為程式必須讀到這兩個符號才會結束, 如果忘了,VC++ 可以直接關掉視窗解決, Borland C 可能只有重開機一途了。 除非用VC++的,有人要問 any 這個鍵在哪裡, 不然應該是沒問題的。 參考資料:碼書 mzvt gpiil flpu ebpus ree wmll xshl qses flpu imil ? Password: aleph ^^^(注意!結束標記。) -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: IP159.dialup.ntu.edu.tw