プロが教えるわが家の防犯対策術!

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください。プログラムの途中経過と実行例を記しておきます。
#include<stdio.h>
int main(){
int x;
char a[256],b[256];

printf("Select Mode 1.Encryption, 2.Decryption :");
scanf("%d",&x);
if(a==1){
printf("Input passphrase :");
scanf("%s",a);
printf("Input key:");
scanf("%d",b);
}else{
printf("Input key:");
scanf("%d",b);

}

if(a==3){
printf("Invalid value\n");
}
return 0;
}
<実行例 1>
Select Mode 1.Encryption, 2.Decryption : 1
Input passphrase : password
Input key : $
TEWWSKV@
<実行例 2>
Select Mode 1.Encryption, 2.Decryption : 2
Input key : $
Code : TEWWSKV@
Decode : password
<実行例 3>
Select Mode 1.Encryption, 2.Decryption : 3
Invalid value

A 回答 (6件)

以下、ファイルの入出力を絡めると理解が遠のくので、


シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf("Input passphrase : ");
scanf("%s", a);

printf("Input key: ");
scanf("%s", b);

} else if (x == 2) {
printf("Input key: ");
scanf("%s", b);

printf("Code : ");
scanf("%s", a);

printf("Decode : ");

} else {
printf("Invalid value\n");
return 0;
}

for (unsigned int i = 0; i < strlen(a); i++) {
r[i] = a[i] ^ b[0];
}

printf("%s\n", r);

return 0;
}
    • good
    • 0

経験豊富なプログラマ諸氏ならこのコードを見て、何が解らないのかを一瞬で察するでしょう?

    • good
    • 0

とりあえず「なにをどう思ってそのように書いたのか」を書いてほしいなぁ.



scanf にいろいろ問題があるのは事実だけどさりとて「じゃあ他のやつだったら問題ないのか」といわれると困るような気がしますね>#3.
    • good
    • 0

まず、課題を箇条書きしてみましょう。



ところで、scanfの使い方、それでいいの?
(というか、最近は課題で平気でscanf使わせているの?)
    • good
    • 0

No.1の方が書かれている様にどこが難しくって、動かせないのか整理してはどうでしょうか。


1.暗号化、復号化のやり方は理解できていますか?。
 課題の暗号は質問文章から、単に、入力とキーのXORを取って、暗号化とし、同じキーを使ってXORを取ることで
 復号化するやり方と思います。→プログラム中に暗号・復号しているとは思えないのですが。。
2. 多分、aが暗号キー、bが入力のつもりなんですよね。
 何で、if(a==1)とif(a==3)の時だけ、こんなことをしているのかも理解できません。
3. もし、頭の中で、やりたいこと、やるべきことが分かっていないのなら、Step毎にやるべきことを列挙して、手計算程度の動作は
 できていますか。それとも、どうやれば良い、プログラム言語自体良く分からない状態なのでしょうか。
    • good
    • 0

>自分には難しすぎて出来ません


何が分からないのかを教えてください
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!