2016-11-16 7 views
2

こんにちはアマチュアの皆さん、ここ2ヶ月間C++を勉強しています。私は関数の理解ではあまり鋭敏ではないし、C++(xorのような)の演算子ではそれほど重要ではない。私はユーザーから文字列を受け取り、^演算子を使ってそれを暗号化し、解読するプログラムを書いています。私は基本的な基盤を持っていると思うけど、奇妙な出力を得ているし、私のforループやXORを使うかもしれないと思う。下の私のプログラムは、どんな助けも大歓迎です。関数を使用したEncrpyt/DecrpytプログラムC++

#include <iostream> 
#include <string> 
#include <cmath> 
using namespace std; 

const short SIZE = 132; 
class deer 
{ 

public: 
char inputdata(); 
char encryptdata(char inputbuffer[SIZE], char encryptbuffer[SIZE]); 
char inputbuffer[SIZE]; 
char encryptbuffer[SIZE]; 
char decryptbuffer[SIZE]; 
char decrpytdata(char n[], char p[]); 
long e; 
long count; 


}; 

int main() 
{ 
deer obj; 
obj.inputdata(); 
obj.encryptdata(obj.inputbuffer, obj.encryptbuffer); 
obj.decrpytdata(obj.encryptbuffer, obj.decryptbuffer); 

system("pause"); 
return 0; 
} 

char deer::inputdata() 
{ 
cout << "please enter your text to be encrpyted" << endl; 
cin.getline(inputbuffer, SIZE); 
cin.gcount(); 
count =cin.gcount(); 
count--; 
cout << inputbuffer << endl; 
return 0; 


} 

char deer::encryptdata(char inputbuffer[], char encryptbuffer[]) 
{ 
short key = 0xAC; 
int i = 0; 
for (int i = 0; i <= count; i++) { 

    inputbuffer[i] = encryptbuffer[i] ^= key; 
    cout << encryptbuffer << endl; 

} 
return *encryptbuffer; 


} 

char deer::decrpytdata(char encryptbuffer[], char decryptbuffer[]) 
{ 
int i = 0; 
for (int i = 0; i <= count; i++) { 

    encryptbuffer[i] ^= decryptbuffer[i]; 

} 
cout << decryptbuffer << endl; 

return decryptbuffer; 
} 
+0

、ラインは 'decryptbuffer [私ではありません]^=暗号化バッファ[i]; '? CとC++では、最初の引数を結果にし、この種のエラーを防ぐために、入力配列を 'const'、つまり' char const encryptbuffer [] 'として宣言しなければなりません。 –

+0

さて、私はそれに私の書式を修正します。私は、最初のSIZE constを除いて、このプログラムにグローバルまたは定数を使用することは許可されていないと言及しませんでした。入力いただきありがとうございます! – eggo

答えて

0

XORを使用した暗号化と復号化には同じキーが必要です(コードの0xAC)。 encryptbufferは、inputbufferをキーと排他的論理和をとることによって生成され、decryptbufferは、encryptbufferをキーと排他的論理和をとって生成されます。したがって、鍵はdeerのメンバーである必要があります。 inputbufferencryptbuffer、およびdecryptbufferがクラス鹿のメンバーであるので、

、メンバ関数enctyptdatadecryptdataを呼び出すときにパラメータとしてそれらを配置する必要がありませんです。

暗号化機能:

char deer::encryptdata() 
{ 
    for (int i=0; i&lt;count; ++i) 
    { 
     encryptbuffer[i] = inputbuffer[i]^key; 
    } 
    cout &lt;&lt; encryptbuffer &lt;&lt; endl; 
} 

復号機能:

char deer::decryptdata() 
{ 
    for (int i=0; i&lt;count; ++i) 
    { 
     decryptbuffer[i] = encryptbuffer[i]^key; 
    } 
    cout &lt;&lt; decryptbuffer &lt;&lt; endl; 
} 

鹿クラス:底部に向かって

class deer 
{ 
    static const char key = 0xAC; 
    ... 
}; 
+0

ちょっとちょっと!これは大きな助けとなりました。私はまだ狂った出力を得ています。例えば、私の文字列を入力すると、「こんにちはいい日があります」と言えば、奇妙なアイコンの束が画面に表示されます。私はそれが文字列から読み取るビット数を暗号化すると思ったので、これが意図されているかどうかはわかりません。いずれにしても、あなたの時間を助けてくれてありがとう、本当にありがとうございます。 – eggo

+0

'encryptbuffer'に奇妙なアイコンが表示されるのは合理的です。なぜならXORされた文字の値は英数字ではないからです。暗号化/復号化を検証する方法は 'encryptdata 'の出力をチェックすることです。 'decryptbuffer'の値が' inputbuffer'と等価なら、メソッドは大丈夫です。 – Kai

関連する問題