行列式加密
❶ 問一下這是什麼代碼 . .--. --- .----. ..- / -..- -... --- .
摩斯電碼,就是早期電報之類用的發送方式,你這個怕是輸入有錯,翻譯出來是
EPO'U XBOU UP MFU IFS LOPX IPX NVDI ZPV EJE GPS IFS, CVU XBOU UP MFU IFS LOPX ZPV DBSF BCPVU IFS.
至少我是看不懂是什麼語言
❷ 有多少種密碼方式除了摩斯密碼外還有什麼密碼
1、RSA演算法密碼
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
2、ECC加密法密碼
ECC演算法也是一個能同時用於加密和數字簽名的演算法,也易於理解和操作。同RSA演算法是一樣是非對稱密碼演算法使用其中一個加密,用另一個才能解密。
3、三分密碼
首先隨意製造一個3個3×3的Polybius方格替代密碼,包括26個英文字母和一個符號。然後寫出要加密的訊息的三維坐標。訊息和坐標四個一列排起,再順序取橫行的數字,三個一組分開,將這三個數字當成坐標,找出對應的字母,便得到密文。
4、柵欄加密法密碼
柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的文件按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。
5、針孔加密法密碼
這種加密法誕生於近代。由於當時郵費很貴,但是寄送報紙則花費很少。於是人們便在報紙上用針在需要的字下面刺一個孔,等到寄到收信人手裡,收信人再把刺有孔的文字依次排列,連成文章。
❸ 替換式密碼的表格式替換加密
在表格式替換密碼中,明文不再單獨替換某個字母,而是一次過替換較大的字母單元(通常為一對字母)。第一個優點是頻率分布比單個字母時更平坦(雖然實際上並不平坦,因為在日常語言中,「TH」就遠遠比「XQ」常見)。其次,其產生的大量的符號,相應地需要更多的密文來進行高效的字母頻率分析。
為了替換每「對」字母,將需要共676個符號(26^2 = 676 )。在之前說過的《書寫中的隱蔽字元》一書中,德拉波爾塔提出了這樣一個系統:用一個20 x 20的表格(義大利或拉丁文字中的20個字母。),其中填上400個特別的字形。然而,該系統實為不切實際,更有可能從來沒有實際使用過。
最早的實用表格式替換密碼是查爾斯·惠斯登(英語:CharlesWheatstone)爵士於1854年所創的波雷費密碼。在此密碼中,5×5的方格中填滿了混合字母(兩個字母,通常I和J並排,即I等於J)。明文中每兩個字母為一單元,通常這個單元會在表上組成一個四方形(單元內容占其中兩個角),然後取另外兩角為密文。當單元內容在同一列或同一行時(即無法組成四方形),同列者密文為明文往右偏移一格;同行者密文為明文往下偏移一格。單元中兩者為同字母者於該單之前添加X(或Q)(即其後全體往後偏移一格)。波雷費密碼於第二次波耳戰爭開始直到第二次世界大戰為止一直用於軍事用途。
在1901年,費利克斯·第利斯塔(英語:Felix_Delastelle)推出了其他一些實際可用的表格式替換加密,包括二分密碼(英語:Bifid_cipher)、四方密碼及三分密碼。
萊斯特·S·希爾(英語:Lester S. Hill)於1929年發明了希爾密碼,它是一種表格式替換加密。希爾密碼可以使用線性代數來結合擁有非常多字母的單元。每個字母被視為二十六進制的數字:A = 0,B = 1,依此類推。(在某些變種中,會添加3個額外符號,將基底變成一個質數。)一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結果同餘26。注意用作加密的矩陣(即密匙),否則就不可能解碼。只有矩陣的行列式和26互質,才是可逆的。
因為希爾密碼完全建基於線性關繫上,它會很容易受到己知明文攻擊(英語:Known-plaintext attack),因此,有時它會結合一些非線性步驟來減少被擊破的機會。
❹ 在c#中如何用矩陣在加密解密中
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)
{
m = mm;
n = nn;
}
//設置m
public void set_m(int mm)
{
m = mm;
}
//設置n
public void set_n(int nn)
{
n = nn;
}
//初始化
public void init_matrix()
{
arr = new float[m * n];
}
//釋放
public void free_matrix()
{
//delete [] arr;
}
//讀取i,j坐標的數據
//失敗返回-31415,成功返回值
public float read(int i,int j)
{
if (i >= m || j >= n)
{
return -31415;
}
//return *(arr + i * n + j);
return arr[i * n + j];
}
//寫入i,j坐標的數據
//失敗返回-1,成功返回1
public int write(int i,int j,float val)
{
if (i >= m || j >= n)
{
return -1;
}
arr[i * n + j] = val;
return 1;
}
};
//二維運算類
class _Matrix_Calc
{
//初始化
public _Matrix_Calc()
{
}
//C = A + B
//成功返回1,失敗返回-1
public int add(ref _Matrix A,ref _Matrix B,ref _Matrix C)
{
int i = 0;
int j = 0;
//判斷是否可以運算
if (A.m != B.m || A.n != B.n ||
A.m != C.m || A.n != C.n)
{
return -1;
}
//運算
for (i = 0;i < C.m;i++)
{
for (j = 0;j < C.n;j++)
{
C.write(i,j,A.read(i,j) + B.read(i,j));
}
}
return 1;
}
//C = A - B
//成功返回1,失敗返回-1
public int subtract(ref _Matrix A,ref _Matrix B, ref _Matrix C)
{
int i = 0;
int j = 0;
//判斷是否可以運算
if (A.m != B.m || A.n != B.n ||
A.m != C.m || A.n != C.n)
{
return -1;
}
//運算
for (i = 0;i < C.m;i++)
{
for (j = 0;j < C.n;j++)
{
C.write(i,j,A.read(i,j) - B.read(i,j));
}
}
return 1;
}
//C = A * B
//成功返回1,失敗返回-1
public int multiply(ref _Matrix A, ref _Matrix B, ref _Matrix C)
{
int i = 0;
int j = 0;
int k = 0;
float temp = 0;
//判斷是否可以運算
if (A.m != C.m || B.n != C.n ||
A.n != B.m)
{
return -1;
}
//運算
for (i = 0;i < C.m;i++)
{
for (j = 0;j < C.n;j++)
{
temp = 0;
for (k = 0;k < A.n;k++)
{
temp += A.read(i,k) * B.read(k,j);
}
C.write(i,j,temp);
}
}
return 1;
}
//行列式的值,只能計算2 * 2,3 * 3
//失敗返回-31415,成功返回值
public float det(ref _Matrix A)
{
float value = 0;
//判斷是否可以運算
if (A.m != A.n || (A.m != 2 && A.m != 3))
{
return -31415;
}
//運算
if (A.m == 2)
{
value = A.read(0,0) * A.read(1,1) - A.read(0,1) * A.read(1,0);
}
else
{
value = A.read(0,0) * A.read(1,1) * A.read(2,2) +
A.read(0,1) * A.read(1,2) * A.read(2,0) +
A.read(0,2) * A.read(1,0) * A.read(2,1) -
A.read(0,0) * A.read(1,2) * A.read(2,1) -
A.read(0,1) * A.read(1,0) * A.read(2,2) -
A.read(0,2) * A.read(1,1) * A.read(2,0);
}
return value;
}
//求轉置矩陣,B = AT
//成功返回1,失敗返回-1
public int transpos(ref _Matrix A,ref _Matrix B)
{
int i = 0;
int j = 0;
//判斷是否可以運算
if (A.m != B.n || A.n != B.m)
{
return -1;
}
//運算
for (i = 0;i < B.m;i++)
{
for (j = 0;j < B.n;j++)
{
B.write(i,j,A.read(j,i));
}
}
return 1;
}
//求逆矩陣,B = A^(-1)
//成功返回1,失敗返回-1
public int inverse(ref _Matrix A, ref _Matrix B)
{
int i = 0;
int j = 0;
int k = 0;
_Matrix m = new _Matrix(A.m,2 * A.m);
float temp = 0;
float b = 0;
//判斷是否可以運算
if (A.m != A.n || B.m != B.n || A.m != B.m)
{
return -1;
}
/*
//如果是2維或者3維求行列式判斷是否可逆
if (A.m == 2 || A.m == 3)
{
if (det(A) == 0)
{
return -1;
}
}
*/
//增廣矩陣m = A | B初始化
m.init_matrix();
for (i = 0;i < m.m;i++)
{
for (j = 0;j < m.n;j++)
{
if (j <= A.n - 1)
{
m.write(i,j,A.read(i,j));
}
else
{
if (i == j - A.n)
{
m.write(i,j,1);
}
else
{
m.write(i,j,0);
}
}
}
}
//高斯消元
//變換下三角
for (k = 0;k < m.m - 1;k++)
{
//如果坐標為k,k的數為0,則行變換
if (m.read(k,k) == 0)
{
for (i = k + 1;i < m.m;i++)
{
if (m.read(i,k) != 0)
{
break;
}
}
if (i >= m.m)
{
return -1;
}
else
{
//交換行
for (j = 0;j < m.n;j++)
{
temp = m.read(k,j);
m.write(k,j,m.read(k + 1,j));
m.write(k + 1,j,temp);
}
}
}
//消元
for (i = k + 1;i < m.m;i++)
{
//獲得倍數
b = m.read(i,k) / m.read(k,k);
//行變換
for (j = 0;j < m.n;j++)
{
temp = m.read(i,j) - b * m.read(k,j);
m.write(i,j,temp);
}
}
}
//變換上三角
for (k = m.m - 1;k > 0;k--)
{
//如果坐標為k,k的數為0,則行變換
if (m.read(k,k) == 0)
{
for (i = k + 1;i < m.m;i++)
{
if (m.read(i,k) != 0)
{
break;
}
}
❺ 希爾密碼原理
希爾密碼(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。
❻ 【Hill密碼加密解密問題】 給定一個長度為n的明文,請問密鑰矩陣的維數具體要怎麼取
不一定
你可以取一個3維的可逆矩陣
但注意矩陣的行列式的值最好是1
這樣可以保證逆矩陣不出現分數
❼ 在加密演算法中屬於公鑰密碼體制的是什麼
演算法介紹:
現有矩陣M,N和P,P=M*N。如果M(或N)的行列式為零,則由P和M(或P和N)計算N(或M)是一個多值問題,特別是M(或N)的秩越小,N(或M)的解越多。
由以上問題,假設Tom和Bob相互通信,現做如下約定:
1. 在正式通信之前,二人約定一個隨機奇異矩陣M。
2. Tom和Bob各自選取一個n*n的隨機矩陣作為他們的私有密鑰,設Tom的為A,Bob的為B。
3. 然後Tom計算矩陣Pa=A*M作為他的公鑰,Bob計算矩陣Pb=M*B作為他的公鑰。
4. 當Tom向Bob發送消息時,計算加密矩陣K=A*Pb,用K對消息加密後發送到Bob端,Bob收到消息後,計算解密矩陣K』= Pa*B,由以上代數關系可以看出,K= K』,也既加密和解密是逆過程,可以參照對稱加密標准AES。
5. Bob向Tom發送消息時,計算解密矩陣K= Pa*B,加密。Tom收到消息後計算解密矩陣K=A*Pb,原理同上。
演算法分析:
由以上介紹可容易看出,此演算法比RSA和ECC的加密效率要高4-6個數量級,且加密強度在增大n的基礎上,可獲得與以上兩演算法相當的加密強度。
該演算法仍在論證階段,歡迎此方面高手攜手參與或提出缺點.
email:[email protected]
❽ 行列式在生活中的應用
1、DNA序列對比
在生物信息學中,人類基因的染色體圖譜在進行DNA序列對比是就用到了矩陣的相似。
基於生物學中序列決定結構,結構決定功能的普遍規律,將核酸序列和蛋白質一級結構上的序列都看成由基本字元組成的字元串,檢測序列之間的相似性,發現生物序列中的功能、結構和進化的信息。
2、遙感圖像對比
圖像配准就是將不同時間、不同感測器(成像設備)或不同條件下(天候、照度、 攝像位置和角度等)獲取的兩幅或多幅圖像進行匹配、疊加的過程,它已經被廣泛地應用 於遙感數據分析、計算機視覺、圖像處理等領域。
由於同一場景拍攝的圖像是真實的三維,世界在不同時間向成像平面的一系列投影,而圖像與圖像之間具有較大的相關性和信息冗 余,所以無論所處理的圖像是發生何種形式的變化。
3、行列式進行保密編譯碼
在英文中有一種對消息進行保密的措施,就是把英文字母用一個整數來表示。然後傳送這組整數。這種方法是很容易根據數字出現的頻率來破譯,例如出現頻率特別高的數字,很可能對應於字母E。
可以用乘以行列式和矩陣A的方法來進一步加密。假如A是一個行列式等於±1的整數矩陣,則A1的元素也必定是整數。而經過這樣變換過的消息,同樣兩個字母對應的數字不同,所以就較難破譯。接收方只要將這個消息乘以A-1就可以復原。
4、行列式在企業設備更新中的應用
企業為了創造更大的價值,需要購買新設備,但買新設備花錢較多。而繼續使用舊設備需要大量的維修費。為了解決這一問題,行列式和矩陣就可以計算出在哪一年更新設備,使企業的經濟效益最好。
5、行列式在文獻管理中的應用
比如現代搜索中往往包括幾百萬個文件和成千的關鍵詞,但可以利用矩陣和行列式的稀疏性,節省計算機的存儲空間和搜索時間。
❾ 矩陣的實際應用有哪些
如下:
1、矩陣在經濟生活中的應用
矩陣就是在行列式的基礎上演變而來的,可活用行列式求花費總和最少等類似的問題;可借用特徵值和特徵向量預測若干年後的污水水平等問題;也可利用矩陣的方法求線性規劃問題中的最優解,求解企業生產哪一種類型的產品,獲得的利潤最大。
2、在人口流動問題方面的應用
這是矩陣高次冪的應用,比如預測未來的人口數量、人口的發展趨勢等。
3、矩陣在密碼學中的應用
可用可逆矩陣及其逆矩陣對需發送的秘密消息加密和譯密。
4、矩陣在文獻管理中的應用
在現代搜索中往往包括幾百個文件和成千的關鍵詞,但可以利用矩陣和向量的稀疏性,節省計算機的存儲空間和搜索時間。
矩陣圖法具有以下幾個特點:
①可用於分析成對的影響因素。
②因素之間的關系清晰明了,便於確定重點。
③便於與系統圖結合使用。
❿ 矩陣的實際應用都有哪些
1、矩陣在經濟生活中的應用
矩陣就是在行列式的基礎上演變而來的,可活用行列式求花費總和最少等類似的問題;可借用特徵值和特徵向量預測若干年後的污水水平等問題;也可利用矩陣的方法求線性規劃問題中的最優解,求解企業生產哪一種類型的產品,獲得的利潤最大。
2、在人口流動問題方面的應用
這是矩陣高次冪的應用,比如預測未來的人口數量、人口的發展趨勢等。
3、矩陣在密碼學中的應用
可用可逆矩陣及其逆矩陣對需發送的秘密消息加密和譯密。
4、矩陣在文獻管理中的應用
在現代搜索中往往包括幾百個文件和成千的關鍵詞,但可以利用矩陣和向量的稀疏性,節省計算機的存儲空間和搜索時間。
矩陣圖法的用途十分廣泛,在質量管理中,常用矩陣圖法解決以下問題:
1、把系列產品的硬體功能和軟體功能相對應,並要從中找出研製新產品或改進老產品的切入點;
2、明確應保證的產品質量特性及其與管理機構或保證部門的關系,使質量保證體制更可靠;
3、明確產品的質量特性與試驗測定項目、試驗測定儀器之間的關系,力求強化質量評價體制或使之提高效率;
4、當生產工序中存在多種不良現象,且它們具有若干個共同的原因時,希望搞清這些不良現象及其產生原因的相互關系,進而把這些不良現象一舉消除。