第三次作業
目標:
撰寫一個用以加密的程式
目的:
練習使用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