❶ 求密文(凱撒密碼)
直接把每個字母往後推三位
出來的就是密文了
即
明文:COMPUTERSYSTEM
密文:FRPSXWHUVBVWHP
而解密時 只需要把密文每個字母前推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;
}
}
}
既然得到了密鑰長度,算完成了對凱撒密碼的破解了,那就進行解密吧,大功告成!
❸ 凱撒密碼的演算法c語言的怎麼實現啊
凱撒密碼是一種非常古老的加密方法,相傳當年凱撒大地行軍打仗時為了保證自己的命令不被敵軍知道,就使用這種特殊的方法進行通信,以確保信息傳遞的安全。他的原理很簡單,說到底就是字母於字母之間的替換。下面讓我們看一個簡單的例子:「」用凱撒密碼法加密後字元串變為「edlgx」,它的原理是什麼呢?把「」中的每一個字母按字母表順序向後移3位,所得的結果就是剛才我們所看到的密文。
#include <stdio.h>
main()
{
char M[100];
char C[100];
int K=3,i;
printf("請輸入明文M(注意不要輸入空白串)\n");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("結果是:\n%s\n",C);
}
❹ 凱撒加密演算法(最簡單的對稱加密)
凱撒密碼是羅馬擴張時期朱利斯• 凱撒(Julius Caesar)創造的,用於加密通過信使傳遞的作戰命令。它將字母表中的字母移動一定位置而實現加密。例如如果向右移動 2 位,則 字母 A 將變為 C,字母 B 將變為 D,…,字母 X 變成 Z,字母 Y 則變為 A,字母 Z 變為 B。
因此,假如有個明文字元串「Hello」用這種方法加密的話,將變為密文: 「Jgnnq」 。而如果要解密,則只要將字母向相反方向移動同樣位數即可。如密文「Jgnnq」每個字母左移兩位 變為「Hello」 。這里,移動的位數「2」是加密和解密所用的密鑰。
該程序既可用於加密又可用於解密。只要傳入明文和偏移量即可加密,解密需要傳入密文和負的偏移量就可以解密。
輸出的結果:
凱撒密碼由於加解密比較簡單,密鑰總共只有 26 個,攻擊者得到密文後即使不知道密鑰,也可一個一個地試過去,最多試 26 次就可以得到明文。
這里不光根據 offset 偏移進行加密,還加上了字元所在的下標進行混合加密。
輸出的結果:
❺ 請比較凱撒密碼維吉尼亞密碼普萊費爾密碼的異同點
比較凱撒密碼維吉羨基尼亞密碼普萊費爾密碼的異同點:
1、維吉尼亞密碼運派運是使用一系列凱撒密碼組成密碼字母旁梁表的加密演算法,屬於多表密碼的一種簡單形式。
2、凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。
❻ 愷撒密碼的加密方法是什麼
根據蘇維托尼烏斯的記載,愷撒曾用此方法對重要的軍事信息進行加密: 如果需要保密,信中便用暗號,也即是改變字母順序,使局外人無法組成一個單詞兆明。如果想要讀懂和理解它們的意思,得用第4個字母置換第一個字母,即以D代A,余此類推。
同樣,奧古斯都也使用過類似方式,只不過他是把字母向右移動一位,而且末尾不折回。每當他用密語寫作時,他都用B代表A,C代表B,其餘的字母也依同樣的規則;用A代表Z。
(6)經典加密演算法凱撒密碼擴展閱讀:
密碼的使用最早可以追溯到族滲告古羅馬時期喊態,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的「愷撒密碼」,它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。 現今又叫「移位密碼」,只不過移動的為數不一定是3位而已。
❼ 求密文(凱撒密碼)
已知凱撒密碼的計算此螞公式為 f(a)=(a+k) mod n,設k=3,棗檔n=26,明文P=COMPUTERSYSTEM,求密文。解:明文字母代碼表如下如下:由於k=3,對於明森岩埋文P=COMPUTERSYSTEMf(C)=(2+3) mod 26=5=Ff(O)=(14+3) mod 26=17=Rf(M)=(12+3) mod 26=15=Pf(P)=(15+3) mod 26=18=Sf(U)=(20+3) mod 26=23=Xf(T)=(19+3) mod 26=22=Wf(E)=(4+3) mod 26=7=Hf(R)=(17+3) mod 26=20=Uf(S)=(18+3) mod 26=21=Vf(Y)=(24+3) mod 26=1=Bf(S)=(18+3) mod 26=21=Vf(T)=(19+3) mod 26=22=Wf(E)=(4+3) mod 26=7=Hf(M)=(12+3) mod 26=15=P所以密文C=Ek(P)=FRPSXWHUVBVWHP
❽ 什麼是凱撒加密法
簡單的說,就是位移加密。
比如你的密碼是ABCDE
然後設置凱撒密碼的偏移量為3的話
那加密之後的密碼就是DEFGH