矩形転置暗号について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あや
記事: 5
登録日時: 3週間前

矩形転置暗号について

#1

投稿記事 by あや » 2週間前

平文を4行8列の暗号鍵で矩形転置で暗号化したいのですが、出力結果が画像のようになってしまいます。ソースコードのどこが間違っているのか教えてください。よろしくお願いします。
添付ファイル
83995404-37F0-45A1-A54E-2D1B51CF1A72.jpeg
これが出力結果です。
D04277A0-279D-40C5-839F-E7140E115246.jpeg
これがソースコードです。
7A17673F-D1FC-4010-815A-4043F40CDDA3.png
これが平文です。

YuO
記事: 941
登録日時: 8年前
住所: 東京都世田谷区

Re: 矩形転置暗号について

#2

投稿記事 by YuO » 2週間前

オフトピック
画像ではなくコピペ等、テキストでデータを書いてください。
非常に読みにくく、比較もしにくいです。
とりあえず、平文1行目と暗号化された文を比較しましたが、問題無く暗号化されているように見えます。

コード:

NASA debuted a color picture fro
NASA deb/uted a c/olor pic/ture fro

N | A | S | A |   | d | e | b
u | t | e | d |   | a |   | c
o | l | o | r |   | p | i | c
t | u | r | e |   | f | r | o

Nuot/Atlu/Seor/Adre/    /dapf/e ir/bcco
NuotAtluSeorAdre    dapfe irbcco
何が問題になっているのでしょうか。

あや
記事: 5
登録日時: 3週間前

Re: 矩形転置暗号について

#3

投稿記事 by あや » 2週間前

NASA debuted a color picture froまでは暗号化されているのですが、それ以降が正しく暗号化されていないので、どこが間違っているのか教えてください。よろしくお願いします。

あや
記事: 5
登録日時: 3週間前

Re: 矩形転置暗号について

#4

投稿記事 by あや » 2週間前

以下がコードです。

コード:

#include <iostream>
#include <fstream>
using namespace std;



#define M 4 // 矩形の行数
#define N 8 // 矩形の列数
/****************************************
メイン関数
****************************************/
void main() {
	ifstream inFile;    //入力ファイル
	ofstream outFile;   //出力ファイル
	char buffer[M][N];   //文字格納のための配列
	int row = 0;      
	int col = 0;
	

	// 入力ファイルと出力ファイルをオープンする
	inFile.open("plain.txt");
	outFile.open("crypt.txt");
	
	//入力ファイルから、最初の1文字を受け取る
	char ch = inFile.get();
	
	//ファイルの終わり(EOF)でない限り、以下を繰り返す
	while (!inFile.eof()) {
		buffer[row][col] = ch;
		col++;
		if (col == N) {
			col = 0;
			row++;
		}
		ch = inFile.get();

		if (row == M) {
			for (int j = 0; j < N; j++) {
				for (int i = 0; i < M; i++) {
					outFile << buffer[i][j];
					buffer[i][j] = 0;
				}
				col = 0;
				row = 0;
			}
		}
	}

		
	//ファイルを閉じる
	inFile.close();
	outFile.close();
}

YuO
記事: 941
登録日時: 8年前
住所: 東京都世田谷区

Re: 矩形転置暗号について

#5

投稿記事 by YuO » 2週間前

あや さんが書きました:
2週間前
それ以降が正しく暗号化されていないので
これはどうやって判断しましたか。
自分で考えた「正しい」はどのような結果ですか。

次の32文字も、

コード:

m the Sp/irit rov/er#*on T/uesday s/howing gray rocks

m the Sp
irit rov
er#*on T
uesday s

mieu/ res/ti#s/ht*d/e oa/ roy/So  /pvTs
で問題無いように思えますが (#はCR、*はLF)。


なんとなく、入力ファイルの改行コードがCRLFで、istream::getがCRとLFを別々に読み出しているのだけれど、
改行を無視して考えているか、NewLineひとつと考えて「正しい」を想定していそうな気がします。

あや
記事: 5
登録日時: 3週間前

Re: 矩形転置暗号について

#6

投稿記事 by あや » 2週間前

暗号化するときは、改行は2文字分として扱うのでしょうか?

YuO
記事: 941
登録日時: 8年前
住所: 東京都世田谷区

Re: 矩形転置暗号について

#7

投稿記事 by YuO » 1週間前

あや さんが書きました:
2週間前
暗号化するときは、改行は2文字分として扱うのでしょうか?
暗号化とは関係ありません。
・ファイル等における改行には1文字の場合と2文字の場合があり
・2文字の改行についてコンパイラによって1文字の改行\nとして扱われたり2文字の組\r\nとして扱われたりする
ということです。

返信

“C言語何でも質問掲示板” へ戻る