[課業] 密碼學作業

看板NTUE-CS101作者 (愛撒嬌的貓)時間13年前 (2011/03/28 15:47), 編輯推噓5(504)
留言9則, 5人參與, 最新討論串1/2 (看更多)
#include<iostream> #include<fstream> using namespace std; char cipher(char key,char original)//轉換函式 參數key,明文字元 { char transfer; //輸出用 int numkey; //暫存由ASCII轉換後的數字 numkey = key - 97; //小寫a的ASCII碼是97 if(original + numkey < 122) //這邊很重要!!由於ASCII碼只定義到127 { //若是超過的不會被當作ASCII處理的樣子 //確切原因博元不知道 //不過大家可以試試看先把他加到超過127 //在減回來,應該是轉不回來 transfer = original + numkey;//密文=原文+key的ASCII碼-97 //不懂為啥的去翻課本 } else { transfer = original - 26 + numkey; //如果加到超過z則-26回頭 } return transfer; //回傳密文 } int main() { string source,secret,key; //定義來源,密文,金鑰 int counter,n; //counter用在剛開始輸入的key,n用在迴圈 cout<<"請輸入明文\n"; cin>>source; //輸入明文 cout<<"請輸入金鑰\n"; cin>>key; //輸入金鑰 counter = 0; for(n=0;n<source.length();n++) { if(counter<key.length()) //分開處理第一個輸入的金鑰 { secret[n] = cipher(key[counter],source[n]); counter++; } else //之後用autokey處理 { secret[n] = cipher(source[n]- counter,source[n]); } } n=0; cout<<"輸出密文\n"; while(true) { if(secret[n] == NULL) //輸出 { break; } cout<<secret[n]; n++; } system("pause"); return 0; } 意外發現,程式都不會寫了!弄個簡單的東西都弄不出來。其實我覺得是308風水不好= = 在實驗室就可以打出來。囧~~~ 輸出的部分不知道為啥直接cout出不去,要用迴圈丟......讀入檔案跟輸出檔案還沒寫 晚點再弄。上面的程式碼肯定很爛,我只有用直覺下去寫,大家應該有很多地方可以改 可以用得更精簡。以上~~博元只有想法= = 博元語法不強。ㄆㄆ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.0.254

03/28 17:44, , 1F
有演算法就很不錯了 XD
03/28 17:44, 1F
※ 編輯: lobaka 來自: 120.127.0.254 (03/28 17:47)

03/28 23:45, , 2F
教學文!!
03/28 23:45, 2F

03/29 10:30, , 3F
為啥你不直接回傳string? C++有支援阿
03/29 10:30, 3F

03/29 10:33, , 4F
我剛跑了一下你的有問題耶....
03/29 10:33, 4F

03/29 11:16, , 5F
是因為key的長度嗎??
03/29 11:16, 5F

03/29 23:08, , 6F
因為string用法不合法,那不是正確的用法。
03/29 23:08, 6F

03/30 01:46, , 7F
...啥
03/30 01:46, 7F

03/30 11:09, , 8F
輸出用的string並未初始化,連陣列長度都沒有,後面的使用
03/30 11:09, 8F

03/30 11:09, , 9F
有可能會覆蓋到記憶體上原有的東西。
03/30 11:09, 9F
文章代碼(AID): #1Da3qczB (NTUE-CS101)
討論串 (同標題文章)
文章代碼(AID): #1Da3qczB (NTUE-CS101)