⑴ 4 16 15 8 19 2 21 22 13 2 21 10 16 15-1 凱撒密碼是什麼
在密碼學中,愷撒密碼(英語:Caesar cipher),或稱愷撒加密、愷撒變換、變換加密,是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。這個加密方法是以羅馬共和時期愷撒的名字命名的,當年愷撒曾用此方法與其將軍們進行聯系。
(以上摘自網路,更多詳情請自行學習了解)
然後這些數字,分別指代英文26個字母,比如4指代d,16指代p等等。以此類推,則除了「-1」以外的其他數字轉換成字母依次是:dpohsbuvmbujpo
-1指的是偏移量為1,即明文中的所有字母分別向右偏移一位繼而得到上述密文。因此若想得到明文,須將dpoh...的所有字母分別向左偏移一位,即d變成c,p變成o等等。以此類推,明文即是:
congratulation
祝賀
至於那個「-1」,個人猜想還有一種理解,就是指4 16……那些數字分別減去1。這樣理解也能得出同一個答案,只是我不確定那個「-」究竟是減號還是普通的短破折號。
⑵ 誰知道怎麼解凱撒等類型的密碼有什麼技巧
凱撒密碼很簡單,其實就是單字母替換。我們看一個簡單的例子:
明文:a b c d e f g h i j k l m n o p
密文:d e f g h i j k l m n o p q r s
若明文為student,對應的密文則為vwxghqw。在這個一一對應的演算法中,凱撒密碼將字母表用一種順序替代的方法來進行加密,此時密鑰為3,就是每個字母順序推後3位。由於應為字母為26個,因此凱撒僅有26個可能的密鑰,非常不安全。
類似的演算法就是使替代不是有規律的,而是隨機生成的一個對照表。比如置換移位演算法里的維吉尼亞密碼。
⑶ 凱撒密碼對應表內容是什麼
根據蘇維托尼烏斯的記載,愷撒曾用此方法對重要的軍事信息進行加密: 如果需要保密,信中便用暗號,也即是改變字母順序,使局外人無法組成一個單詞。如果想要讀懂和理解它們的意思,得用第4個字母置換第一個字母,即以D代A,余此類推。
同樣,奧古斯都也使用過類似方式,只不過他是把字母向右移動一位,而且末尾不折回。每當他用密語寫作時,他都用B代表A,C代表B,其餘的字母也依同樣的規則;用A代表Z。
(3)如何用凱撒密碼破譯以下十六進制數擴展閱讀:
密碼的使用最早可以追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的「愷撒密碼」,它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。 現今又叫「移位密碼」,只不過移動的為數不一定是3位而已。
⑷ 誰懂計算機的凱撒碼 我想知道怎麼代換
這里有方法,自己看吧,比較多,呵呵
[凱撒介紹]
凱撒密碼(kaiser)是羅馬擴張時期朱利斯"凱撒(Julius Caesar)創造的,用於加密通過信使傳遞的作戰命令。它將字母表中的字母移動一定位置而實現加密。
[加密原理]
凱撒密碼的加密演算法極其簡單。其加密過程如下:
在這里,我們做此約定:明文記為m,密文記為c,加密變換記為E(k1,m)(其中k1為密鑰),解密變換記為D(k2,m)(k2為解密密鑰)(在這里k1=k2,不妨記為k)。凱撒密碼的加密過程可記為如下一個變換:
c≡m+k mod n (其中n為基本字元個數)
同樣,解密過程可表示為:
m≡c+k mod n (其中n為基本字元個數)
對於計算機而言,n可取256或128,m、k、c均為一個8bit的二進制數。顯然,這種加密演算法極不安全,即使採用窮舉法,最多也只要255次即可破譯。當然,究其本身而言,仍然是一個單表置換,因此,頻率分析法對其仍是有效的。
[加密演算法]
我們預定義基本字元個數為 #define MAX 128
凱撒加密函數可以表示為
[Copy to clipboard]
CODE:
char cipher(char plain_char, int key)
{
return (plain_char + key) % MAX;
};
凱撒解密函數:
[Copy to clipboard]
CODE:
char decipher(char cipher_char, int key)
{
return (cipher_char - key + MAX) % MAX;
};
加密後,原所有的ASCII碼偏移key位,解密則移回key位。
如果要對一個文本文件進行加密,則只要依次逐個字元逐個字元地讀取文本文件,進行加密後,逐個字元逐個字元寫入密文文本文件中,即可:
[Copy to clipboard]
CODE:
FILE *fp_plaintext;
FILE *fp_ciphertext;
char plain_char;
... ...
while((plain_char=fgetc(fp_plaintext))!=EOF)
{
fputc(cipher(plain_char,key),fp_ciphertext);
}
對文件的解密也同樣方法。
[破解原理]
一篇包含字元的英文文章,其各ASCII碼字元出現,都有一定的頻率,下面是對Google上隨意搜索到的英文文章進行分析的結果,見表:
QUOTE:
=================================================
FileName : 01.txt
[1] 32: times:204
[2] 101:e times:134
[3] 116:t times:91
[4] 105:i times:87
[5] 111:o times:77
[6] 108:l times:75
[7] 97:a times:75
[8] 110:n times:69
[9] 10:
times:67
[10] 115:s times:63
=================================================
FileName : php.si.source.txt
[1] 32: times:576
[2] 101:e times:162
[3] 115:s times:153
[4] 110:n times:141
[5] 114:r times:138
[6] 105:i times:135
[7] 10:
times:134
[8] 116:t times:129
[9] 42:* times:116
[10] 111:o times:103
=================================================
FileName : work.txt
[1] 32: times:51322
[2] 101:e times:30657
[3] 116:t times:23685
[4] 97:a times:19038
[5] 111:o times:17886
[6] 105:i times:16156
[7] 110:n times:15633
[8] 114:r times:15317
[9] 115:s times:15226
[10] 104:h times:12191
=================================================
FileName : 02.txt
[1] 32: times:299
[2] 101:e times:217
[3] 110:n times:136
[4] 105:i times:133
[5] 111:o times:124
[6] 116:t times:116
[7] 97:a times:110
[8] 115:s times:98
[9] 114:r times:92
[10] 108:l times:82
=================================================
FileName : 03.txt
[1] 45:- times:404
[2] 32: times:394
[3] 101:e times:237
[4] 116:t times:196
[5] 114:r times:173
[6] 97:a times:163
[7] 105:i times:161
[8] 110:n times:153
[9] 111:o times:142
[10] 115:s times:129
=================================================
FileName : 04.txt
[1] 32: times:326
[2] 101:e times:179
[3] 116:t times:106
[4] 105:i times:101
[5] 111:o times:96
[6] 110:n times:94
[7] 97:a times:92
[8] 115:s times:78
[9] 100:d times:61
[10] 114:r times:60
=================================================
FileName : 05.txt
[1] 32: times:441
[2] 101:e times:191
[3] 111:o times:151
[4] 116:t times:120
[5] 97:a times:112
[6] 110:n times:108
[7] 105:i times:91
[8] 114:r times:84
[9] 117:u times:79
[10] 115:s times:79
有此分析可知,一篇英文文章中,出現較高頻率的兩個字元是 ' ' (空格) 和 'e',而且它們的ASCII碼分別是32和101,差值是69。
既然凱撒密碼利用的是單表替換的一種簡單加密演算法,所以,我們的主角, ' ' 和 'e' ,在解密後,依然會保持相同的ASCII碼差值,69。
|c1 - c2| = |'e' - ' '| = |101 - 32| = 69
|m1 - m2| = | ((c1 + k) mod 256)-((c2 + k) mod 256)| = |c1 - c2| = |'e' - ' '| = 69
現在可以得到破解凱撒密碼的原理了,我們統計一片經過凱撒加密的密文字元信息,在出現頻率較高的字元裡面尋找差值是69的2個字元,這兩個必定是 ' ' 和 'e' 字元的加密字元,計算偏移量(既密鑰key),通過解密運算,還原出明文。
[破解演算法]
任何一片英文加密後的密文,我們統計出所有字元的個數:
[Copy to clipboard]
CODE:
#define MAX 128
... ...
FILE *fp_ciphertext;
char cipher_char;
int i; //密文文件長度,包含多少字元
unsigned int size_file=0; //申明num數組,存儲各個ASCII字元在密文中出現的個數
num[MAX];
... ...
for(i = 0;i < MAX; i++) //初始化num數組中的值
num[i] = 0;
... ...
while((cipher_char=fgetc(fp_ciphertext))!=EOF)
{
num[cipher_char]++;
size_file++;
}
統計出現最多次數的字元,定義#define GETTOP 10,統計最多的前10位字元:
[Copy to clipboard]
CODE:
//統計前10位
#define GETTOP 10
... ...
int temp,i,j;
int maxascii[GETNUM]; //申明maxascii數組,存儲統計出的概率前10位的字元ascii碼
int maxtimes[GETNUM]; //申明maxtimes數組,存儲統計出的概率前10位的字元的出現次數
... ...
for(i=0;i<GETTOP;i++)
{
temp=0; //臨時變數temp裡面來存儲出現最多次數的字元的ascii碼
for(j=1;j<MAX;j++) //依次比較所有的字元次數,獲得最多字元的ascii碼
{
if(num[j]>=num[temp])
temp=j;
}
maxascii[i]=temp; //把出現最多次數字元的ascii存儲到相應的maxascii數組中
maxtimes[i]=num[temp]; //把最多次數字元的出現次數存儲到相應的maxtimes數組中
num[temp]=0; //把最多次數字元的次數賦值成0,
//進行循環運算,同樣的演算法,第二次循環得到的值,肯定是出現第二多的字元
//避免了對256或128個字元進行排序的復雜運算
//當年我用匯編編寫成績排序的程序時,也用這套排序演算法:-)
}
找出出現最多字元中,ASCII碼差別是69的兩個字元,計算出密鑰key的長度:
[Copy to clipboard]
CODE:
for(i=0;i<GETTOP;i++)
{
for(j=0;j<GETTOP;j++)
{
if((max[i]-max[j])==69)
{
key=(max[j] - 32 + MAX ) % MAX;
printf("Key : %d\n",key);
break;
}
}
}
既然得到了密鑰長度,算完成了對凱撒密碼的破解了,那就進行解密吧,大功告成!