看板 b89902xxx 關於我們 聯絡資訊
第三次作業 目標: 撰寫一個用以加密的程式 目的: 練習使用write指令,並比較buffer大小對程式效能的影響 負責助教: 羅習五 d89015@csie.ntu.edu.tw 課程站台: 網站http://140.112.31.103 Linux主機telnet://140.112.28.110 重要日期: 4/9晚上12:00前,遲交一天扣分數的3%,繳交的最後期限是下次交作業之前 (也就是繳交期限過後再二個禮拜4/23) 第二次作業從3/28號開始扣分 作業的相關檔案(main.c makefile testest…)可於3/29號後開始下載 語法: my_cipher 檔案名稱 key [buffer大小] 一定得指定檔案名稱,如果沒有指定buffer大小,則預定為1000個byte 如果檔案名稱為"檔名.ciphertext",則解密該檔,並且輸出檔的檔名為"檔名" 如果不是上述狀況,則將加密後的資料輸出到"檔案名稱. ciphertext" 檔案如果已經存在,則覆蓋它 範例: my_cipher haha.txt key_value 輸出到檔案haha.txt.ciphertext,並且使用1000個byte當buffer(加密) my_cipher cici.txt.ciphertext key_value 500 輸出到檔案cici.txt並且使用500個byte當buffer(解密) 規則: 請把你的所有程式碼寫在fun.c裡面(把這個函數當成main一樣就行了) 理論上如果使用wirte函數,則buffer越大執行速度會越快,助教會測試這點 你可以自己測測看buffer的大小為1, 1024, 4096大小時程式是否可以順利執行 (助教測試時不會給定錯誤的buffer size,如0, -1, -100等等) 分數(程式正確性): 自己加密後的資料可以自己解密 75% 可以解開別人的密文25% 不用作錯誤檢查,或者是你發現傳入值不合理時直接return false(1) 助教會使用telent://140.112.28.110這台機器測試你們的程式,請大家寫好作 業後一定要到這台機器上測試看看 加密演算法: 步驟一:由key產生Cipher _key 先對key的每個byte做XOR變成一個byte 範例: "key" => 6B 65 79 ('k' 'e' 'y'的ASCII code) => 77 (6b XOR 65 XOR 79) 因此Cipher_key為EE 步驟二:用Cipher_key對檔案加密 加密方法參考接下來的圖解 (請自己上網看) 範例: 假設ciper_key=0x14,則Rev(Cipher_key) = 0x28 目的是要對"12345678"加密 "12345678"= 31 32 33 34 35 36 37 38 加密後變成 25 3f 18 04 25 3b 18 08 31 xor 14 = 25 32 xor 25 xor 28 = 3f 33 xor 3f xor 14 = 18 34 xor 18 xor 28 = 04 35 xor 04 xor 14 = 25 ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.126