2012-03-07 123 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密碼,這幾乎就是你所描述的。我沒有看,但你可能很容易找到至少一個這樣的實現的源代碼。 – 2012-03-07 22:05:27

+0

感謝您的回覆,但我想知道您是否可以像我說的那樣進行二進制計算? – midnightBlue 2012-03-07 22:08:09

+0

簡短的回答是「是」 - 您可以讀取和操作二進制數據。通常,你會將它作爲'unsigned char'的數組(或向量等)來完成。 – 2012-03-07 22:10:06

回答

0

您可以閱讀使用fread二進制文件的char或int數組。只要字節順序保持不變,您可以讀取任何文件並將其寫回。你可以用你讀的字節或單詞做你想做的。您可以使用sizeof來了解int的大小。在今天的大多數平臺上,它是4個字節。

+0

感謝您的回覆:)雖然我並沒有完全理解你的字節順序是什麼意思? – midnightBlue 2012-03-07 22:15:16

+0

請參閱http://en.wikipedia.org/wiki/Endianness – 2012-03-07 22:18:38