① 怎樣用矩陣加密和解密一段英文
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//矩陣數據結構
//二維矩陣
class _Matrix
{
public int m;
public int n;
public float[] arr;
//初始化
public _Matrix()
{
m = 0;
n = 0;
}
public _Matrix(int mm,int nn)
{
m = mm;
n = nn;
}
//設置m
public void set_mn(int mm,int nn)
② 矩陣加密和解密
去看看矩陣的乘法運算,就清楚了。很簡單的乘法運算
③ 對各種加密方法進行研究,找出元素屬於Z26的所有可能的Hill2密碼加密矩陣。
我後天給你,上學期還學得還,先統計,然後在找解密矩陣,如果功夫大可以窮舉,不過還是建議先統計分析
④ 四方密碼的方法
首先選擇兩個英文字作密匙,例如example和keyword。對於每一個密匙,將重復出現的字母去除,即example要轉成exampl,然後將每個字母順序放入矩陣,再將余大鉛尺下的字母順序放入矩陣,便得出加密矩陣。
將這兩個加密矩陣放在右上角和左下角,餘下的兩個角放a到z順序的矩陣:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
加密的步驟:
兩個字母一組地滾高分開訊息:(例如hello world變成he ll ow or ld)
找出第一個字母在左上角矩陣的位置
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
同樣道激碰理,找第二個字母在右下角矩陣的位置:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找右上角矩陣中,和第一個字母同行,第二個字母同列的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找左下角矩陣中,和第一個字母同列,第二個字母同行的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
這兩個字母就是加密過的訊息。
he lp me ob iw an ke no bi的加密結果:
FY GM KY HO BX MF KK KI MD
⑤ 求個矩陣加密演算法的程序
暈,我原號登陸竟然沒有回答框~~!!
是不是樓主對我 (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
-------------------------------------
⑥ 希爾密碼原理
希爾密碼(Hill Cipher)是運用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發明。每個字母當作26進制數字:A=0, B=1, C=2... 一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果MOD26。
中文名
希爾密碼
外文名
Hill Cipher
原理
基本矩陣論
類別
替換密碼
提出者
Lester S. Hill
快速
導航
產生原因
原理
安全性分析
例子
簡介
希爾密碼是運用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發明。
每個字母當作26進制數字:A=0, B=1, C=2... 一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果模26。
注意用作加密的矩陣(即密匙)在必須是可逆的,否則就不可能解碼。只有矩陣的行列式和26互質,才是可逆的。
產生原因
隨著科技的日新月異和人們對信用卡、計算機的依賴性的加強,密碼學顯得愈來愈重要。密碼學是一門關於加密和解密、密文和明文的學科。若將原本的符號代換成另一種符號,即可稱之為廣義的密碼。狹義的密碼主要是為了保密,是一種防止竊文者得知內容而設的另一種符號文字,也是一般人所熟知的密碼。
使用信用卡、網路賬號及密碼、電子信箱、電子簽名等都需要密碼。為了方便記憶,許多人用生日、電話號碼、門牌號碼記做密碼,但是這樣安全性較差。
為了使密碼更加復雜,更難解密,產生了許多不同形式的密碼。密碼的函數特性是明文對密碼為一對一或一對多的關系,即明文是密碼的函數。傳統密碼中有一種叫移位法,移位法基本型態是加法加密系統C=P+s(mod m)。一般來說,我們以1表示A,2表示B,……,25表示Y,26表示Z,以此類推。由於s=0時相當於未加密,而0≤s≤m-1(s≥m都可用0≤s≤m-1取代),因此,整個系統只有m-1種變化。換言之,只要試過m-1次,機密的信息就會泄漏出去。
由此看來,日常生活中的密碼和傳統的密碼的可靠性較差,我們有必要尋求一種容易將字母的自然頻度隱蔽或均勻化,從而有利於統計分析的安全可靠的加密方法。希爾密碼能基本滿足這一要求。
原理
希爾加密演算法的基本思想是,將d個明文字母通過線性變換將它們轉換為d個密文字母。解密只要作一次逆變換就可以了,密鑰就是變換矩陣本身。[1]
希爾密碼是多字母代換密碼的一種。多字母代換密碼可以利用矩陣變換方便地描述,有時又稱為矩陣變換密碼。令明文字母表為Z,若採用L個字母為單位進行代換,則多碼代換是映射f:Z→Z。若映射是線性的,則f是線性變換,可以用Z上的L×L矩陣K表示。若是滿秩的,則變換為一一映射,且存在有逆變換K。將L個字母的數字表示為Z上的L維矢量m,相應的密文矢量c,且mK=c,以K作為解密矩陣,可由c恢復出相應的明文c·K=m。
在軍事通訊中,常將字元(信息)與數字對應(為方便起見,我們將字元和數字按原有的順序對應,事實上這種對應規則是極易被破解的):
abcde…x y z
12345…242526
如信息「NOSLEEPPING」對應著一組編碼14,15,19,12,5,5,16,16,9,14,7。但如果按這種方式直接傳輸出去,則很容易被敵方破譯。於是必須採取加密措施,即用一個約定的加密矩陣K乘以原信號B,傳輸信號為C=KB(加密),收到信號的一方再將信號還原(破譯)為B=KC。
⑦ 密碼的分類
密碼的種類有很多,這里列舉幾個知名的密碼種類
1、摩斯電碼
摩爾斯電碼由點(.)嘀、劃(-)嗒兩種符號按以下原則組成:
一點為一基本信號單位,每一劃的時間長度相當於 3 點的時間長度。在一個字母或數字內,各點、各劃之間的間隔應為兩點的長度。字母(數字)與字母(數字)之間的間隔為 7 點的長度。
2、愷撒移位密碼。
也就是一種最簡單的錯位法,將字母表前移或者後錯幾位。
例如: 明碼表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密碼表:DEFGHIJKLMNOPQRSTUVWXYZABC,這就形成了一個簡單的密碼表,如果想寫 frzy(即明文),那麼對照上面密碼表編成密碼也就
是 iucb(即密文)了。
密碼表可以自己選擇移幾位,移動的位數也就是密鑰。
3、柵欄易位法。
即把將要傳遞的信息中的字母交替排成上下兩行,再將下面一行字母排在上面一行的後邊,從而形成一段密碼。
舉例:
TEOGSDYUTAENNHLNETAMSHVAED
解:
將字母分截開排成兩行,如下
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再將第二行字母分別放入第一行中,得到以下結果 THE LONGEST DAY MUST HAVE AN END。
(7)雙加密矩陣擴展閱讀:
密碼是一門科學,有著悠久的歷史。密碼在古希臘與波斯帝國的戰爭中就被用於傳遞秘密消息。在近代和現代戰爭中,傳遞情報和指揮戰爭均離不開密碼,外交斗爭中也離不開密碼。
密碼一般用於信息通信傳輸過程中的保密和存儲中的保密。隨著計算機和信息技術的發展,密碼技術的發展也非常迅速,應用領域不斷擴展。密碼除了用於信息加密外,也用於數據信息簽名和安全認證。
這樣,密碼的應用也不再只局限於為軍事、外交斗爭服務,它也廣泛應用在社會和經濟活動中。當今世界已經出現了密碼應用的社會化和個人化趨勢。
例如:可以將密碼技術應用在電子商務中,對網上交易雙方的身份和商業信用進行識別,防止網上電子商務中的「黑客」和欺詐行為。
應用於增值稅發票中,可以防偽、防篡改,杜絕了各種利用增值稅發票偷、漏、逃、騙國家稅收的行為,並大大方便了稅務稽查。
應用於銀行支票鑒別中,可以大大降低利用假支票進行金融詐騙的金融犯罪行為;應用於個人移動通信中,大大增強了通信信息的保密性等等。
參考資料來源:網路--密碼
⑧ 希爾密碼求解
希爾加密演算法的基本思想是,將d個明文字母通過線性變換將它們轉換為d個密文字母。解密只要作一次逆變換就可以了,密鑰就是變換矩陣本身。如信息「NOSLEEPPING」對應著一組編碼14,15,19,12,5,5,16,16,9,14,7。但如果按這種方式直接傳輸出去,則很容易被敵方破譯。於是必須採取加密措施,即用一個約定的加密矩陣K乘以原信號B,傳輸信號為C=KB(加密),收到信號的一方再將信號還原(破譯)為B=KC。如果敵方不知道加密矩陣,則很難破譯。
解密
第一步,求密匙矩陣K的逆矩陣[2]K。K可用Mathematica計算。
Inverse123-120213∥MatrixForm=-614-3125-1-3,
即K=-614-3125-1-3。
第二步,由得Y=KX得X=KY(i=1,2,3,4),再次進行矩陣乘法運算:
X=KY=-614-3125-1-3671610=141519;
X=KY=-614-3125-1-327-244=1255;
X=KY=-614-3125-1-3501675=16169;
X=KY=-614-3125-1-321035=1470。
這樣原來的信息編碼為14,15,19,12,5,5,16,16,9,14,7。
第三步,對照編碼表,即可獲得對方發來的信息內容為「NOSLEEPPING」。
⑨ 有多少種密碼方式除了摩斯密碼外還有什麼密碼
1、RSA演算法密碼
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
2、ECC加密法密碼
ECC演算法也是一個能同時用於加密和數字簽名的演算法,也易於理解和操作。同RSA演算法是一樣是非對稱密碼演算法使用其中一個加密,用另一個才能解密。
3、三分密碼
首先隨意製造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然後寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。
4、柵欄加密法密碼
柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的文件按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。
5、針孔加密法密碼
這種加密法誕生於近代。由於當時郵費很貴,但是寄送報紙則花費很少。於是人們便在報紙上用針在需要的字下面刺一個孔,等到寄到收信人手裡,收信人再把刺有孔的文字依次排列,連成文章。
⑩ Shannon 理論
首先,評價密碼體制安全性的不同途徑,定義了幾個有用的准則
P與K的概率分布到處C的概率分布:
把密文元素看出隨機變數,用Y表示,則有:P[Y=y].對於K∈K定義: C(K)={e k (x):x∈P}
即C(K)代表密鑰是K時的所有可能的密文。對於任意的y∈C,我們有:
同樣可以觀察到,對任意的y∈C和x∈P,可如下計算條件概率P[Y=y|X=x] (給定明文x,求密文y的概率):
利用貝葉斯定理可以計算出計算條件概率P[X=x|Y=y] (給密文y,求明文x,的概率)
一個例子:
這個密碼體制可以用以下加密矩陣表示:
則在C(密文)上的概率分布:
P[1]=P[K1] P[a] =1/2 1/4=1/8 C=1
p[2]=p[k2] p[a]+p[k1] p[b]=7/16 C=2
P[3]=P[a] P[k3]+p[k2] p[b]=1/4; C=3
P[4]=...=3/16 C=4
計算出給定密文後,明文空間上的條件概率分布為:
P[a|1]=(1/4 1/2)/(1/8)=1 P[b|1]=(3/4 0)/(1/8)=0
p[a|2]=(1/4*1/4)/(7/16)=1/7 p[b|2]=6/7
p[a|3]=1/4 p[b|3]=3/4
p[a|4]=0 p[b|4]=1
一次一密:
假設隨機變數X在有限集合X上取值,則隨機變數X的熵定義為:
如果|X|=n,並且對於所有的x∈X,P[X]=1/N,那麼H(X)=log2n。同樣的,對任意的隨機變數X,H(X)>0。
一個例子
計算上個例子的熵:
H(P)=-1/4log2(1/4)-3/4log2(3/4)≈0.81;
H(K)=1.5 H(C)≈1.85
條件熵H(K|C) 稱為密鑰含糊度,度量了給定密文下密鑰的不確定性
偽密鑰,可能但不正確的密鑰
簡單起見,以C=P的密碼體制為例:這種類型的密碼體制稱為內包的密碼體制。設S1={P,P,K1,E1,D},S2={P,P,K2,E2,D2}
具體兩個相同明文空間(密文空間)的內包的密碼體制。那麼S1與S2的乘積是:{P,P,K1xK2,E,D}
乘積密碼體制的密鑰形式為K=(K1,K2),加密和解密的規則定義如下:
P[(K1,K2)]=P[K1]xP[K2] ,即K1和K2的概率分布,獨立的選取K1和K2
則乘法密碼的密碼體制如下:
以上研究的密碼體制都是冪等的