Re: [課業] 密碼學作業

看板NTUE-CS101作者 (嘿嘿嘿)時間14年前 (2011/03/29 10:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《lobaka (愛撒嬌的貓)》之銘言: : #include<iostream> : #include<fstream> : using namespace std; : char cipher(char key,char original)//轉換函式 參數key,明文字元 : { : char transfer; //輸出用 : int numkey; //暫存由ASCII轉換後的數字 直接比對他都會幫你很nice的轉好 : 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; //回傳密文 : } 我的加密是這樣寫... cryp[] 原文 , temp[] 輸入的key+原文(和原文等長) for(int j=0 ; j<cryp.length() ; j++) { int add = int(cryp[j]-97) + temp[j]-97; //a=0,...,z=25 cryp[j] = add % 26 + 97; //轉成英文 } 這時候的回傳cryp[] , 就是加密完成的 然後丟進二維陣列的方式有很多 甚至你可以不要丟,用個 index 跑來跑去也可以 1.跑7 * row //row是總密文字數/7 (要判斷啥時要加1喔 %7 > 0時) 2.一個一個丟進去 從[0][0]開始,丟到完這樣 輸出部分,要根據你輸入的key2 ,7位數字順序一行一行輸出 for(int i=0;i<7;i++) { int var = key2[i]-1; //key2: 7位數字 (1~7不重複) for(int j=0;j<row;j++) //text[7][row]是剛丟完的2維陣列 { if(text[var][j] < 97 || text[var][j] > 122) //如果不是英文,遇到空白或是結束 break; else { cout<<text[var][j]; //輸出爽的 fout<<text[var][j]; //丟到檔案 } } } --END-- -- ※ 編輯: jerry771210 來自: 140.112.25.183 (03/29 10:59)
文章代碼(AID): #1DaKaZKI (NTUE-CS101)
討論串 (同標題文章)
文章代碼(AID): #1DaKaZKI (NTUE-CS101)