## 矩形転置暗号について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら　　※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー

かずまさん。

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

あや さんが書きました:
1年前

inFile.close() の前に次のコードを追加すればよいのではありませんか？

コード:

``````	if (col != 0 || row != 0) {
while (1) {
buffer[row][col] = ' ';
if (++col == N) {
col = 0;
if (++row == M) break;
}
}
for (int j = 0; j < N; j++)
for (int i = 0; i < M; i++) outFile << buffer[i][j];
}
``````
あるいは、最初に buffer をスペースで初期化しておき、

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

NASA debuted a color picture from the Spirit rover
on Tuesday showing gray rocks peppering a Martian
lake bed awash in its natural hues of red pink
and orange Mission scientists said they were
bowled over by the spectacular quality of
the image taken with a dual camera system
called pancam that is mounted on a mast jutting
up from the rover I think my reaction has been
one of shock and awe said Jim Bell the team
member in charge of pancam Using special software
mission scientists can fly though the image zooming
in on rocks and other landscape features of interest
It is approximately the color that you would see
with your eyes if you were standing there Bell said
The resolution of course is pretty much what you
would see Pancam has 20 20 vision It is three to
four times better than any previous mission that has gone
to Mars in fact these pictures are the highest resolution
highest detailed pictures of Mars ever obtained They
are absolutely spectacular

この平文を行数4，列数８で矩形転置で暗号化したいのですが，最後のabsolutely spectacularのbsolutely spectacularの部分が暗号化されません．

コード:

``````#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");

char ch = inFile.get();

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();
}``````

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

あや さんが書きました:
1年前

・ファイル等における改行には1文字の場合と2文字の場合があり
・2文字の改行についてコンパイラによって1文字の改行\nとして扱われたり2文字の組\r\nとして扱われたりする
ということです。

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

あや さんが書きました:
1年前
それ以降が正しく暗号化されていないので
これはどうやって判断しましたか。

コード:

``````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を別々に読み出しているのだけれど、

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

コード:

``````#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();
}``````

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

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

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

オフトピック

とりあえず、平文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