㈠ 替換式密碼的多表替換加密
在1467年,多表替換密碼由萊昂·巴蒂斯塔·阿爾伯蒂以圓碟的形式首次描述。約翰尼斯·特里特米烏斯所著的《隱寫術》(古希臘文:Steganographia)中介紹了一種表格(古希臘文:tableau)(見下;15世紀已完成但很久以後才出版)。1563年,喬瓦尼·巴蒂斯塔·德拉波爾塔(英語:Giovanni_Battista_della_Porta)在《書寫中的隱蔽字元》(古希臘文:De FurtivisLiterarum Notis)描述了一個更復雜的混合字母版本。
在一個多表替換密碼中,會使用多個字母作為密碼。為了加快加密或解密速度,所有的字母通常寫在一張表格上,密碼學上稱作tableau。這種表格通常是26×26,因為這樣才能放下全部26個英文字母。填充表格及選擇下次使用的字母的方法,就是不同多字母替換密碼之間的定義。多字母替換密碼比單字母更難打破,因為其替換可能性多,密文要較長才可。
其中最著名的一種為吉奧萬·巴蒂斯塔·貝拉索於1585年推出的維吉尼亞密碼。它於1863年之前一直未被破解。法國人稱它作「不能破譯的密碼」(法語:le chiffre indéchiffrable)。(此密碼曾被誤以為由布萊斯·德·維吉尼亞所創,所以才叫作維吉尼亞密碼。)
維吉尼亞密碼中,表格的第一行只需直接填上26個字母,然後以握帆空下每一行的字母都是向左偏移一格。(這叫作表格橫移,數學上每一列同餘26。)要用這種密碼需要使用一個關鍵字來作為密鑰。關鍵字每次用完就再次重復。假設關鍵字是「CAT」,明文的第一個字由「C」加密,第二個字由「A」加密,第三個則由「T」加密,然後再回到C加密,一直重復。然後按照右邊的密碼表加密,例如BALL用CAT作關鍵字時會加密至DAEN,可見即使是同一個「L」亦會加密至另一個字母。現實中,維吉尼亞密碼的關鍵字非常長。
1863年,弗里德里希·卡西斯基(英語:FriedrichKasiski)少校發明了一種方法(在克里米亞戰爭前已由查爾斯·巴貝奇秘密並獨立地發明),使得可以計算維吉尼亞密碼中關鍵字的長度。這種方法需要較長的密文,因為其運作依靠找出常見的字(如THE)使用相同關鍵字(如ABC)的數量,因此段瞎,極短的密文難以用此辦法找出。
因此,即使在轎兆今天,如果在表格中使用混合表加密,或關鍵字是隨機的,維吉尼亞密碼理論上亦難以破解。但由於實際上很難用到這些方法,維吉尼亞密碼的使用越來越少。
其他著名的多字母替換加密包括:
格蘭示菲特密碼 - 與維吉尼亞密碼相似,但由於整個密碼只使用10個單元,因此關鍵字長度有限,很容易被破解。博福特密碼 - 這實際上就是維吉尼亞密碼,除「tabula」改為向後偏移一格,數學上是等式為:密文=鍵-明文。博福特密碼屬於對等加密,即加密演算法與解密演算法相同。自動密鑰密碼 - 它的密鑰開頭是一個關鍵詞,之後則是明文的重復,以避免周期函數。運動密鑰密碼,關鍵詞從某些文章或名句中取出,因此可以非常長。
現代的流密碼中可以看出,現代的多表替換加密都努力改進流密鑰,使其盡可能的長及不可預知。
㈡ 凱撒加密法
凱撒加密法的替換方法是通過排列明文和密文字母表,密文字母表示通過將明文字母表向左或向右移動一個固定數目的位置。例如,當偏移量是左移3的時候(解密時的密鑰就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用時,加密者查找明文字母表中需要加密的消息中的每一個字母所在位置,並且寫下密文字母表中對應的字母。需要解密的人則根據事先已知的密鑰反過來操作,得到原來的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
凱撒加密法的加密、解密方法還能夠通過同餘的數學方法進行計算。首先將字母用數字代替,A=0,B=1,...,Z=25。此時偏移量為n的加密方法即為:
En(x)=(x+n)mod26{\displaystyle E_{n}(x)=(x+n)\mod 26}
解密就是:
Dn(x)=(x−n)mod26{\displaystyle D_{n}(x)=(x-n)\mod 26}
㈢ 古典密碼兩種加密方式
古典加密演算法:置換密碼
置換密碼演算法的原理是不改變明文字元,只將字元在明文中的排列順序改變,從而實現明文信息的加密。置換密碼有時又稱為換位密碼。
矩陣換位法是實現置換密碼的一種常用方法。它將明文中的字母按照給的順序安排在一個矩陣中,然後用根據密鑰提供的順序重新組合矩陣中字母,從而形成密文。例如,明文為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
㈣ 數據加密的方法有哪些如題
1. 數據加密標准 傳統加密方法有兩種,替換和置換.上面的例子採用的就是替換的方法:使用密鑰將明文中的每一個字元轉換為密 文中的一個字元.而置換僅將明文的字元按不同的順序重新排列.單獨使用這兩種方法的任意一種都是不夠安全的,但 是將這兩種方法結合起來就能提供相當高的安全程度.數據加密標准(Data Encryption Standard,簡稱DES)就採用了 這種結合演算法,它由IBM制定,並在1977年成為美國官方加密標准. DES的工作原理為:將明文分割成許多64位大小的塊,每個塊用64位密鑰進行加密,實際上,密鑰由56位數據位和8 位奇偶校驗位組成,因此只有256個可能的密碼而不是264個.每塊先用初始置換方法進行加密,再連續進行16次復雜的 替換,最後再對其施用初始置換的逆.第i步的替換並不是直接利用原始的密鑰K,而是由K與i計算出的密鑰Ki. DES具有這樣的特性,其解密演算法與加密演算法相同,除了密鑰Ki的施加順序相反以外. 2. 公開密鑰加密 多年來,許多人都認為DES並不是真的很安全.事實上,即使不採用智能的方法,隨著快速、高度並行的處理器的出 現,強制破解DES也是可能的.公開密鑰加密方法使得DES以及類似的傳統加密技術過時了.公開密鑰加密方法中,加密 演算法和加密密鑰都是公開的,任何人都可將明文轉換成密文.但是相應的解密密鑰是保密的(公開密鑰方法包括兩個密鑰, 分別用於加密和解密),而且無法從加密密鑰推導出,因此,即使是加密者若未被授權也無法執行相應的解密. 公開密鑰加密思想最初是由Diffie和Hellman提出的,最著名的是Rivest、Shamir以及Adleman提出的,現在通常稱為 RSA(以三個發明者的首位字母命名)的方法,該方法基於下面的兩個事實: 1) 已有確定一個數是不是質數的快速演算法; 2) 尚未找到確定一個合數的質因子的快速演算法. RSA方法的工作原理如下: 1) 任意選取兩個不同的大質數p和q,計算乘積r=p*q; 2) 任意選取一個大整數e,e與(p-1)*(q-1)互質,整數e用做加密密鑰.注意:e的選取是很容易的,例如,所有大 於p和q的質數都可用. 3) 確定解密密鑰d: d * e = 1 molo(p - 1)*(q - 1) 根據e、p和q可以容易地計算出d. 4) 公開整數r和e,但是不公開d; 5) 將明文P (假設P是一個小於r的整數)加密為密文C,計算方法為: C = Pe molo r 6) 將密文C解密為明文P,計算方法為: P = Cd molo r 然而只根據r和e(不是p和q)要計算出d是不可能的.因此,任何人都可對明文進行加密,但只有授權用戶(知道d) 才可對密文解密.
㈤ 用C++編程實現 替換加密法
#include <iostream.h>
void main()
{
char Code[5]="LOVE";
char *p =new char [4];
int i = 0;
while(Code[i] != '\0')
{
p[i] = Code[i]+3;
cout<<p[i];
i++;
}
cout<<endl;
}
輸出為:ORYH
Press any key to continue
㈥ 替換式密碼的諧音替換法
早期的加密中,為增加替換式密碼應付頻率分析攻擊的強度,有時會採用「諧音」來改變明文字母頻率。在這種加密演算法中,明文字母可以映射到多個密文符號。通常情況下,頻率最高的明文符號(如E)會比低使用頻率的字母(如X)有更多的諧音符號,使頻率分布更為平坦,讓分析更困難。
但亦因此,只是字母之間互相替換就會造成不夠分配,從而有了好幾種不同的解決方法。其中最簡單的方式可以算是用1-0共10個數字作為某些字母的替換。另一種方法則是將現有的字母分開成原字母配以簡單的變化、大寫、小寫、上下倒轉的字母、鏡像文字(左右倒轉)等。雖然更為藝術化,卻不代表一定更安全,其中一些諧音替換法全部使用新發明的奇特符號來代表字母。
一種有趣的變化名為命名密碼法(英語:nomenclator)。此加密法有許多不同的版本,之間的區別來自其前綴。而該前綴來自宣讀來訪貴賓稱號的公職人員名字。這種密碼結合一個小型密碼本(英語:Codebook)組成一個大型的諧音替換表。在此密碼中,常用單詞會按密碼本加密,餘下字母則按另一本密碼本加密,兩者符號最後在密文中混起來,以減低簡易替換密碼中被破解的風險。路易十四所使用的密碼是羅西諾爾家族(英語:Rossignols)創立的偉大密碼,該密碼直至法國王室廢止後百年才被破解。
15世紀早期至18世紀後期,命名密碼是外交文件及間諜最常使用的加密,然而其中大多數仍然使用加密性能較差的命名密碼。雖然由十六世紀中葉開始政府情報機構的密碼分析員就破解部分命名密碼法,但使用者通常的反應僅僅是加大諧音替換表。十八世紀後期,諧音替換系統開始消亡之時,一些命名密碼已有高達5萬個符號。
然而,並非所有命名密碼法都已被破解。直到今天,仍然不時有新的命名密碼被破解的新聞。
比爾密碼是另一個諧音替換法的例子。這個故事指在1819年至1821年期間由一個加密文本來隱藏美國獨立宣言中所述的寶藏。在這里,每個密文字元由一個數字替換。數字代表著獨立宣言中第幾個字的第一個字母。獨立宣言中許多字的首字母都是一樣的,而密文數字能是其中任何一個,例如正文中第二和第六個字都是「I」開頭,即「I」既可以是2,又可以是6。而解讀僅僅就是把密文中的數字(如代數X),放到獨立宣言中查找(第X個字的首字母)。
斯塔爾則描述了另一個諧音替換密碼,其密碼是第一次嘗試在電腦的資料庫上加密。在斯塔爾的方法中,無論是明文還是密文都是以二進制字元串存儲,因此諧音的數量可以非常大,使得頻率分析比平常更為困難。
書本式加密(英語:Book cipher)與散列板都是諧音替換密碼的一種。
㈦ 字元替換加密功能
簡單講就是對一篇文章中的字母進行調換,比如字母A的換成字母C,以此類推替換之後別人就認不出來了,而根據事先制定好的對應規則轉換一下就又變回原來的文章了。當然這是最簡單替換加密,而正常的加密應該是在編碼層面上的。我們知道在計算機中的數據都是由0、1組成的信號序列,我們平時使用的字元其實在不同的編碼規則下也都對應著相應的0、1字元串。比如在A規則下字母D對應著000111,而在B規則下字母D就可能是001100。總之,無論採用怎樣的編碼規則一篇文章在計算機中無非就是這些0、1字元串的組合,我們只要按照相應的規則解碼就可以了。而加密就是把這些0、1序列按照一定的規則打亂順序,這樣一來如果直接解碼肯定就得不到原有的內容了,只有按照一定的規則把序列先變回原來的順序(解密)才能進行解碼。而這一定的規則就是你所輸入的密碼,再舉一個例子,如果你輸入的密碼是ABC,對應的二進制串是六位的110010,在加密時就可以採用對位變換的辦法,即每六位對應一下,如果同一位 的數字相同就用1表示、不同就用0表示,例如110010(密碼串)000010(原始數據)001111(加密數據)這樣一來加密的內容其實反映的就是原始數據和密碼間的相同程度,這種方法解碼是很簡單的,只要對位比較一下就可以了。字元替換大致就是這么個思路,至於在具體的加密過程中不同的軟體可能有自己獨立的演算法。
㈧ 加密字元串加密成字母
#include
#include
void replace(char *src, int n)
{
char *s = src;
n = n % 26;
while(*s != 0)
{
*s = *s + n;
if(*s > 'Z') *s -= 26;
s++;
}
}
void disorder(char *s, char *key)
{
int len = 0 , i = 0;
char *tmp;
while(s[len++] != 0);
tmp = (char*)malloc(sizeof(char) * (len));
while(i < len) tmp[i] = s[i++];
for(i = 0; i < len - 1; i++)
{
s[i] = tmp[key[i] - '0' - 1];
}
free(tmp);
}
void main()
{
int n;
char str[100], key[100];
printf("input : ");
//請合法輸入eg. AXZ 2 231
scanf("%s%d%s", str, &n, key);
replace(str, n);
printf("str = %s\n", str);
disorder(str, key);
printf("str = %s\n", str);
}