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
No.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;
}
No.4
- 回答日時:
とりあえず「なにをどう思ってそのように書いたのか」を書いてほしいなぁ.
scanf にいろいろ問題があるのは事実だけどさりとて「じゃあ他のやつだったら問題ないのか」といわれると困るような気がしますね>#3.
No.2
- 回答日時:
No.1の方が書かれている様にどこが難しくって、動かせないのか整理してはどうでしょうか。
1.暗号化、復号化のやり方は理解できていますか?。
課題の暗号は質問文章から、単に、入力とキーのXORを取って、暗号化とし、同じキーを使ってXORを取ることで
復号化するやり方と思います。→プログラム中に暗号・復号しているとは思えないのですが。。
2. 多分、aが暗号キー、bが入力のつもりなんですよね。
何で、if(a==1)とif(a==3)の時だけ、こんなことをしているのかも理解できません。
3. もし、頭の中で、やりたいこと、やるべきことが分かっていないのなら、Step毎にやるべきことを列挙して、手計算程度の動作は
できていますか。それとも、どうやれば良い、プログラム言語自体良く分からない状態なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語について
-
unsigned int型について
-
2の累乗を計算するプログラム...
-
strcmp
-
コマンドラインに出力した文字...
-
平均合計偏差値標準偏差の出し方
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
switch分のケースを範囲数?に...
-
WM_CLOSEで閉じれないウィンド...
-
【C言語教えてください】sin波...
-
じゃんけんゲーム
-
ifなんですが
-
C言語の勉強しています。すみま...
-
小数点切捨て表示
-
c言語でAからZまでを表示する...
-
C言語に関する質問です
-
C言語の数値入力
-
2つ分数の四則演算を行うプロ...
-
改行について 1行に何個かづ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printf で二進表示を行いたい。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
テキストカーソル位置の取得
-
10個出力で改行したいのですが...
-
cshの文字列操作(0埋め)
-
コンパイルエラーについて
-
コマンドラインに出力した文字...
-
ifなんですが
-
strcmp
-
c言語でAからZまでを表示する...
-
なぜgccはstdio.hをインクルー...
-
(C言語)西暦年月日を入力して...
-
error C2143: 構文エラー : ';'...
-
三角形の判別
-
4の倍数を論理演算で表す。。
-
printfの出力内の文字をdefine...
-
scanfに文字が入力されたときに...
-
unsigned int型について
-
C言語について
おすすめ情報