暈,我原號登陸竟然沒有回答框~~!!
是不是樓主對我 (1西方不勝1) 做了限制? 那我也只能回答一部分...
把 生成滿秩矩陣以及其逆矩陣 的代碼貼上來....
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#define MAX 8 // 矩陣大小
#define PT 10 // 附矩陣 隨機初始值的最大值
#define bianhuan 100 // 由對角線矩陣生成滿秩矩陣所需的行變化次數
struct changs // 記錄變化的過程, 以便逆過來求其逆矩陣
{
int temp1 ;
int temp2 ;
} change[bianhuan + 1 ] ;
int Matrix[MAX][MAX] ; // 滿秩矩陣
int R_matrix[MAX][MAX]; // 逆矩陣
// ***** 生成 滿秩矩陣 並求出該滿秩矩陣的逆矩陣 ****************************//
void creat()
{
int i , k ;
int flage = 0 ;
for(i = 0 ; i < MAX ; i ++ ) // 生成主對角線矩陣
Matrix[i][i] = R_matrix[i][i] = 1 ;
for(k = 0 ; k < bianhuan ; k ++ ) // 進行 行 隨意變化生成滿秩矩陣 , 並記錄下變化過程
{
int x1 = change[k].temp1 = rand() % MAX ;
int x2 = rand() % MAX ;
while( x2 == x1 ) x2 = rand() % MAX ;
change[k].temp2 = x2 ;
for(i = 0 ; i < MAX ; i ++ )
if( Matrix[x1][i] + Matrix[x2][i] >= 31 ) break ; // 控制矩陣中最大的數的范圍在30內
if(i >= MAX )
{
for(i = 0 ; i < MAX ; i ++ )
Matrix[x1][i] += Matrix[x2][i] ;
}
else k-- ,flage ++ ;
if(flage > 2000 ) { k++ ; break ; }
}
for(k-- ; k >= 0 ; k -- ) // 行逆變換, 求出其逆矩陣
{
for( i = 0 ; i < MAX ; i ++ )
R_matrix[ change[k].temp1 ][i] -= R_matrix[ change[k].temp2 ][i] ;
}
return ;
}
int main()
{
int i , j ;
srand(time(0)) ;
creat() ;
printf("加密矩陣為:\n") ;
for(i =0 ; i < MAX ; i ++ )
{
for(j =0 ; j < MAX ; j ++)
printf("%4d " , Matrix[i][j]) ;
printf("\n") ;
}
printf("\n") ;
printf("解密矩陣為:\n") ;
for( i = 0; i < MAX ; i ++ )
{
for(j =0 ; j < MAX ; j ++ )
printf("%4d ",R_matrix[i][j]) ;
printf("\n");
}
return 0 ;
}
如下:是一個測試數據.
加密矩陣為:
14 8 29 30 10 2 14 13
11 8 23 25 6 1 10 8
12 8 26 27 7 3 11 9
7 5 15 15 3 1 5 4
9 6 19 21 7 1 10 9
10 6 21 22 7 2 10 9
8 6 17 18 3 1 6 4
7 6 15 19 5 1 9 7
解密矩陣為:
-2 5 -1 -2 -3 5 -2 -1
-1 5 2 -1 -1 -1 -4 -1
2 -1 2 0 1 -5 0 0
-1 -4 -3 2 1 4 3 1
-3 2 0 -2 2 3 0 -2
-1 1 0 0 -1 2 -1 0
2 4 4 -4 -1 -6 -2 -1
1 -3 -2 4 -1 1 0 2
被加密文件:
=====================================
發往: 劉曉輝 (ACM基地/QT002)
時間: 2007-06-11 星期一 18:58:40 (RSA)(封裝)
(文件) player.swf
-------------------------------------
加密後文件:
x xxxx \ \\\\ g gggg 7 7777 R RRRR W WWWW ? ???? E EEEE x xxxx \ \\\\ g gggg 7 7777 R RRRR W WWWW ? ???? E EEEE x xxxx \ \\\\ g gggg 7 7777 R RRRR W WWWW ? ???? E EEEE x xxxx \ \\\\ g gggg 7 7777 R RRRR W WWWW ? ???? E EEEE hh]hv
Q QJQ[ YYSYd 11.16 G鶪?GQ KKDKU 8858> ;;5;D B9#PIaBP2,@:K2=90F@S9E'#-%-'72B-60):5F0:"-)4"*&!/+7&-%$8-3>H3*!*25*/$.6=. %"+0"( %-4%#$%'?5>nJ6Q1'2V8,C8,6`>1I?4"**$+K2&7.&-P5(;##<&1"%@(#/+(
J1X!"9%B%& A(I#'? 2"< 6#?(,*14)@x+2\. 8g 7%-R &/W�???"
(ER2L]>'<JE+AS% #. 8"5?;$7D*?)5�.
.5 ^A`E3QK3K2*CR7T9.I.-*@ .B0"7D?F2%;5"4 16)9)/*,3hk
$)QT #'-Y^ 13 #GI ? %KN 8; ;> K(;3T&':0#?@!5'H"#&
3(#96+$=( #+*"/?/
` "I' Q?,? A?" E25?%%.:xS#.\=&2gE7# (R9 ?!*W<? ?(#E0V]K%IvS BJ9;[A IS>AdH '. %6( ;?51Q8 >D65U< -5%+>. 25.)D. x xx x \ \\ \ g gg g 7 77 7 R RR R W WW W ? ?? ? E EE E x xx x \ \\ \ g gg g 7 77 7 R RR R W WW W ? ?? ? E EE E x xx x \ \\ \ g gg g 7 77 7 R RR R W WW W ? ?? ? E EE E x xx x \ \\ \ g gg g 7 77 7 R RR R W WW W ? ?? ? E EE E P(Px P ==\ = E"Eg E %%7 % 66R 6 ::W : **? * --E -
解密後文件:
=====================================
發往: 劉曉輝 (ACM基地/QT002)
時間: 2007-06-11 星期一 18:58:40 (RSA)(封裝)
(文件) player.swf
-------------------------------------
⑵ 為什麼Word 07版本里的矩陣、方程組顯示出來的是亂碼
裝一個公式編輯器
⑶ 古典密碼兩種加密方式
古典加密演算法:置換密碼
置換密碼演算法的原理是不改變明文字元,只將字元在明文中的排列順序改變,從而實現明文信息的加密。置換密碼有時又稱為換位密碼。
矩陣換位法是實現置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然後用根據密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為attack
begins
at
five,密鑰為cipher,將明文按照每行6列的形式排在矩陣中,形成如下形式:
a
t
t
a
c
k
b
e
g
i
n
s
a
t
f
i
v
e
根據密鑰cipher中各字母在字母表中出現的先後順序,給定一個置換:
1
2
3
4
5
6
f
=
1
4
5
3
2
6
根據上面的置換,將原有矩陣中的字母按照第1列,第4列,第5列,第3列,第2列,第6列的順序排列,則有下面形式:
a
a
c
t
t
k
b
i
n
g
e
s
a
i
v
f
t
e
從而得到密文:aacttkbingesaivfte
⑷ 請用矩陣變位法將明文:」computer 」加密,並寫出其密文。 密鑰: 3×3矩陣,置換: f=((123) (312))
樓主你好~~
密鑰為3*3矩陣,置換為f=((1,2,3),(3,1,2)),也就是說將明1列->密3列,明2列->密1列,明3列->密2列。
我們分步進行
1)構造3x3矩陣:
| 1 | 2 | 3 |
| _ | _ | _ |
| _ | _ | _ |
| _ | _ | _ |
2)填入明文:
| 1 | 2 | 3 |
| _ | C | O | <-注意第一個有一個空格
| M | P | U |
| T | E | R |
3)矩陣變位,置換為f=((1,2,3),(3,1,2)):
| 3 | 1 | 2 |
| O | _ | C |
| U | M | P |
| R | T | E |
4)輸出密文:
o_cumprte <- 注意_就是空格
其實矩陣變位本質是周期性改變明文段排列的加密方法,屬於古典加密中的置換移位加密,這一類中最著名的是維吉尼亞加密法,古典加密還有個分類是替代加密,例如凱撒加密法,古典加密都屬於對稱加密,都禁受不住字典攻擊。
⑸ 傳統的加密方法有哪些
本文只是概述幾種簡單的傳統加密演算法,沒有DES,沒有RSA,沒有想像中的高端大氣上檔次的東東。。。但是都是很傳統很經典的一些演算法
首先,提到加密,比如加密一段文字,讓其不可讀,一般人首先會想到的是將其中的各個字元用其他一些特定的字元代替,比如,講所有的A用C來表示,所有的C用E表示等等…其中早的代替演算法就是由Julius Caesar發明的Caesar,它是用字母表中每個字母的之後的第三個字母來代替其本身的(C=E(3,p)=(p+3) mod 26),但是,這種加密方式,很容易可以用窮舉演算法來破解,畢竟只有25種可能的情況..
為了改進上訴演算法,增加其破解的難度,我們不用簡單的有序的替代方式,我們讓替代無序化,用其中字母表的一個置換(置換:有限元素的集合S的置換就是S的所有元素的有序排列,且每個元素就出現一次,如S={a,b}其置換就只有兩種:ab,ba),這樣的話,就有26!種方式,大大的增加了破解的難度,但是這個世界聰明人太多,雖然26!很多,但是語言本身有一定的特性,每個字母在語言中出現的相對頻率可以統計出來的,這樣子,只要密文有了一定數量,就可以從統計學的角度,得到准確的字母匹配了。
上面的演算法我們稱之為單表代替,其實單表代替密碼之所以較容易被攻破,因為它帶有原始字母使用頻率的一些統計學特徵。有兩種主要的方法可以減少代替密碼里明文結構在密文中的殘留度,一種是對明文中的多個字母一起加密,另一種是採用多表代替密碼。
先說多字母代替吧,最著名的就是playfair密碼,它把明文中的雙字母音節作為一個單元並將其轉換成密文的雙字母音節,它是一個基於由密鑰詞構成的5*5的字母矩陣中的,一個例子,如密鑰為monarchy,將其從左往右從上往下填入後,將剩餘的字母依次填入剩下的空格,其中I/J填入同一個空格:
對明文加密規則如下:
1 若p1 p2在同一行,對應密文c1 c2分別是緊靠p1 p2 右端的字母。其中第一列被看做是最後一列的右方。
2 若p1 p2在同一列,對應密文c1 c2分別是緊靠p1 p2 下方的字母。其中第一行被看做是最後一行的下方。
3 若p1 p2不在同一行,不在同一列,則c1 c2是由p1 p2確定的矩形的其他兩角的字母,並且c1和p1, c2和p2同行。
4 若p1 p2相同,則插入一個事先約定的字母,比如Q 。
5 若明文字母數為奇數時,則在明文的末端添加某個事先約定的字母作為填充。
雖然相對簡單加密,安全性有所提高,但是還是保留了明文語言的大部分結構特徵,依舊可以破解出來,另一個有意思的多表代替密碼是Hill密碼,由數學家Lester Hill提出來的,其實就是利用了線性代數中的可逆矩陣,一個矩陣乘以它的逆矩陣得到單位矩陣,那麼假設我們對密文每m個字母進行加密,那麼將這m個字母在字母表中的序號寫成矩陣形式設為P(如abc,[1,2,3]),密鑰就是一個m階的矩陣K,則C=P*K mod26,,解密的時候只要將密文乘上K的逆矩陣模26就可以了。該方法大大的增加了安全性。
⑹ C語言中 矩陣相乘後出現亂碼 求幫忙看哪裡出了問題
inta[M][N],b[N][L],c[M][L];
這行定義 改成
inta[M][N],b[N][L],c[M][L]={{0}};
或者 在最開始加一個雙重循環, 把c的每個值都賦值為0.
否則後續
c[z][y] += a[z][x] * b[x][y];
是累加到初始值上的.
⑺ 有多少種密碼方式除了摩斯密碼外還有什麼密碼
1、RSA演算法密碼
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
2、ECC加密法密碼
ECC演算法也是一個能同時用於加密和數字簽名的演算法,也易於理解和操作。同RSA演算法是一樣是非對稱密碼演算法使用其中一個加密,用另一個才能解密。
3、三分密碼
首先隨意製造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然後寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。
4、柵欄加密法密碼
柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的文件按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。
5、針孔加密法密碼
這種加密法誕生於近代。由於當時郵費很貴,但是寄送報紙則花費很少。於是人們便在報紙上用針在需要的字下面刺一個孔,等到寄到收信人手裡,收信人再把刺有孔的文字依次排列,連成文章。
⑻ 給一段文字加密的方法是什麼
用數字來代替字母。
多文字加密法的密鑰是一個5X5的矩陣。這個矩陣的5行和5列用含有5個字母的關鍵詞來標識。該關鍵詞不能有重復的字母。字母表的每一個字母填寫在這個矩陣中。當然,矩陣只有25個位置,而字母表有26個字母,因此i和j占同一個單元。這意味著所有j都變成了i。
最早的一個單碼加密法是希臘作家Polybius在大約公元前200年發明的。該加密法成為Polybius方格,因為它將字母表的字母填充在一個正方形中,並給行和列加編號。每個字母由對應的行號和列好來替代。
多碼加密法是一種替換加密法,其替換形式是:其中的每個明文字母可以密文中的多個字母來代替,而每個密文字母也可以表示多個明文字母。這種加密法可以干擾字母出現頻率分析法。具體加密演算法有:Vigenere加密法,自動密鑰加密法,Nihilist加密法,回轉輪加密法等。
⑼ 矩陣加密和解密
去看看矩陣的乘法運算,就清楚了。很簡單的乘法運算