作者lobaka (愛撒嬌的貓)
看板NTUE-CS101
標題[課業] 密碼學作業
時間Mon Mar 28 15:47:47 2011
#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
1F:推 StranGhost:有演算法就很不錯了 XD 03/28 17:44
※ 編輯: lobaka 來自: 120.127.0.254 (03/28 17:47)
2F:推 brightevil:教學文!! 03/28 23:45
3F:推 jerry771210:為啥你不直接回傳string? C++有支援阿 03/29 10:30
4F:推 jerry771210:我剛跑了一下你的有問題耶.... 03/29 10:33
5F:推 jerry771210:是因為key的長度嗎?? 03/29 11:16
6F:→ lobaka:因為string用法不合法,那不是正確的用法。 03/29 23:08
7F:→ game0416:...啥 03/30 01:46
8F:→ lobaka:輸出用的string並未初始化,連陣列長度都沒有,後面的使用 03/30 11:09
9F:→ lobaka:有可能會覆蓋到記憶體上原有的東西。 03/30 11:09