2012-03-07 17 views
0

単純な行列乗算に基づく暗号化のための大学プロジェクトでの作業。行列乗算による暗号化

プロジェクトの概要は次のとおりです。

暗号化キーマトリクス= 暗号化ファイルを掛けたテキストファイルへのテキストファイル。

暗号化されたファイルとキーマトリクスの逆数を掛けたもの =復号化されたファイル。

しかし、私は少しさらに行くと任意のファイル(テキスト、mp3、GIFなどなど)を行うことができるようにしたいです。

私はこの問題を解決しようと何時間も研究しており、少し不満を感じ始めています。

私が考えることができる最良の方法は、プログラムが生のバイナリを読み取り、その暗号化を実行することです。

ので - >質問:

  1. 私は行列に入れて、ファイルからの生のバイナリを抽出することができ、 行列の乗算を実行し、(基本的に)ファイルにバイナリを書き戻しますか?

  2. また、別のコンピュータでこのような方法の実行可能性は何ですか? とプラットフォーム?

(私は戻って変換するint型と復号化にするために、バイナリ から変換多分あれば、それは別のコンピュータ上の異なる サイズの割り当てなどをされたCHANGEかもしれない?考えています)また、私は意見を歓迎していますより良い解決策について

--->しかし、基本的なアルゴリズムは行列乗算に基づいている必要があります。

マイコード:

int writetomatrix(int current_variable) 
{ 
    if (counter == 9){ 
     counter=0; 
     b=0; 
     a=0;} 

    if (b==3) b=0; 
    if (a==3) {b++; 
       a=0;} 
    counter++; 
    B[a][b]=current_variable; 
    a++; 

} 
    int main() { 
     int *buffer= new int[1]; 
     ifstream input; 
     input.open ("input.txt",ios::in|ios::binary); 
     input.read ((char*)&buffer, 1); 
     writetomatrix(buffer); 
    } 

私が取得エラー:

initializing argument 1 of ‘int writetomatrix(int)’ 
+0

Unixの「crypt」のいくつかの(古い)バージョンはHill暗号を使用しました。私は見ていませんが、少なくとも1つのそのような実装のソースをかなり簡単に見つけることができます。 –

+0

返事をありがとうが、私は言ったようにバイナリ計算を行うことができるかどうかを知りたがっていますか? – midnightBlue

+0

短い答えは「はい」です。バイナリデータを読み込んで操作できます。通常、 'unsigned char'の配列(またはベクトルなど)として使用します。 –

答えて

0

あなたがcharのか、int型の配列にfreadを使用してバイナリファイルを読み込むことができます。バイトオーダーが変わらない限り、ファイルを読み込んで書き戻すことができます。あなたはあなたが読んだバイトまたは単語であなたが望むことをすることができます。 sizeofを使用すると、intのサイズを知ることができます。今日のほとんどのプラットフォームでは、4バイトです。

+0

返信ありがとう:私はあなたがバイトオーダーの意味を完全に理解していませんでしたか? – midnightBlue

+0

http://en.wikipedia.org/wiki/Endiannessを参照してください。 –