C言語なら俺に聞け(入門編)Part 69

このエントリーをはてなブックマークに追加
661デフォルトの名無しさん
ストリーム暗号を作っているのですが、手動でやると復号できるのに
プログラムでやろうとするとうまくいきません。2回同じ暗号化を
すれば元に戻るはずなのにそうなりません。
出来ればコマンドラインで暗号化復号化の選択ができるようにしたいです。
初心者でよくわからないことが多いのですがよろしくお願いします。

if (argc < 2) { printf("error\n"); return 1;}
sprintf(fin, "%.255s", argv[1]);
sprintf(fout, "%.250s.perm", argv[1]);

if(d==0){
fp=fopen("2.perm","wb");
fq=fopen("2","rb");
}else{
fp=fopen("2.txt","wb");
fq=fopen("2.perm","rb");
}
662デフォルトの名無しさん:2010/09/24(金) 12:49:30
暗号化するときに
fp=fopen(fout,"wb");
fq=fopen(fin,"rb");
とするのはいいのですが、復号のときに暗号化されたファイルを
読み込んで処理しても復号できない。
何のデータにばけているのかわかりません。
663デフォルトの名無しさん:2010/09/24(金) 13:03:12
まず暗号化が正しく行われているかどうかを確認するべき
プログラムで暗号化してできた暗号文を、手作業で暗号化したものと比較してみる
暗号文が間違ってるなら、そんなもの復号できるわけないからな
664デフォルトの名無しさん:2010/09/24(金) 13:08:34
暗号文は正しいです。手動でプログラムのファイル名を書き換えて
復号すれば成功します。プログラムで自動化しようとして失敗してます。
665デフォルトの名無しさん:2010/09/24(金) 13:12:40
まとめて自動化したとき書き込み後fcloseせずに読み込んだとかか?
666デフォルトの名無しさん:2010/09/24(金) 13:15:15
fpは
fp=fopen("2.perm","wb");
fp=fopen("2.txt","wb");
fp=fopen(fout,"wb");
の3通りあるのか? どういう使い分けで?
667デフォルトの名無しさん:2010/09/24(金) 13:16:37
どこの段階でおかしくなってるかデータを出力して確認すれば。デバッグ能力を養うチャンスだ。答えだけポンと与えられてもまたすぐ行き詰るぞ
668デフォルトの名無しさん:2010/09/24(金) 13:20:08
今はうまく動かないのでif文で条件分岐してます。
if(d==0){ 暗号化用
fp=fopen("2.perm","wb");
fq=fopen("2","rb");
}else{ 復号化用
fp=fopen("2.txt","wb");
fq=fopen("2.perm","rb");
}

fp=fopen(fout,"wb");
fq=fopen(fin,"rb");
これは標準入力からファイル名を指定したときの残骸です。
669デフォルトの名無しさん:2010/09/24(金) 13:25:39
./a.exe file file.perm  暗号化
./a.exe file.perm file.txt 復号化

これでうまくいくはずなのに、そうなりません。
670デフォルトの名無しさん:2010/09/24(金) 13:26:49
じゃあコンピューターが壊れているんだろう。買い直せばいいんじゃないかな