Ⅰ 凱撒密碼
我覺得創建26個文件實在太冗雜了。其實一個就夠了,因為隨著你的選擇的改變(比如以9為加密條件,所有字母循環後移9位),目標文件裡面的內容就自動更新了。
當然你也可以使用函數 int create(char *filename , int mode) 在執行框裏手動輸入像 e:\\original.txt 這樣的地址字元,但你想像一下,這是不是很麻煩?
在實際加密中,可使用隨機函數 rand()產生循環後移位數,而且完全可以不限制在26位,擴展ASCII碼可以產生成千上萬的字元,將文件加密到那些幾乎無規律,難以識別的字元上,安全性就提高了許多。當然還有什麼多輪加密之類的。可以自己慢慢摸索,挺有趣的。祝你好運!
修改如下(已成功執行):
#include<stdio.h>
#include<stdlib.h>
char encrypt(char ch,int n)/*加密函數,把字元向右循環移位n*/
{
while(ch>='A'&&ch<='Z')
{
return ('A'+(ch-'A'+n)%26);
}
while(ch>='a'&&ch<='z')
{
return ('a'+(ch-'a'+n)%26);
}
return ch;
}
void main()
{
FILE *in,*out;
char ch1,ch2;
int i;
printf("Please input the number(1~26) you want to use for encrypt:");
scanf("%d",&i);
if((in=fopen("e:\\original.txt","r"))==NULL)/*文件名根據自己建立的位置修改,
我建在e盤的根目錄下
{
printf("Can not open this file!\n");
exit(0);
}
if((out=fopen("e:\\encrypt.txt","w"))==NULL) //同上
{
printf("Can not open this file!\n");
exit(0);
}
while(!feof(in)){
if((ch1=fgetc(in))!=EOF)
ch2=encrypt(ch1,i);
fputc(ch2,out);
}
printf("Encrypt is over!\n");
fclose(in);
fclose(out);
}
Ⅱ 愷撒密碼的原理
密碼的使用最早可以追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的「愷撒密碼」,它是一種替代密碼,通過將字母按順序推後起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。現今又叫「移位密碼」,只不過移動的位數不一定是3位而已。
密碼術可以大致分為兩種,即移位和替換,當然也有兩者結合的更復雜的方法。在移位中字母不變,位置改變;替換中字母改變,位置不變。
將替換密碼用於軍事用途的第一個文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本無法看懂信息。
蘇托尼厄斯在公元二世紀寫的《愷撒傳》中對愷撒用過的其中一種替換密碼作了詳細的描寫。愷撒只是簡單地把信息中的每一個字母用字母表中的該字母後的第三個字母代替。這種密碼替換通常叫做愷撒移位密碼,或簡單的說,愷撒密碼。
盡管蘇托尼厄斯僅提到三個位置的愷撒移位,但顯然從1到25個位置的移位我們都可以使用, 因此,為了使密碼有更高的安全性,單字母替換密碼就出現了。
如:
明碼表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密碼表 T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
明文 T H E F A U L T, D EAR BRUTUS, L I ES N OT I N OUR ST ARS B UT I N OURSELVES.
密文 M A X Y T N EM, WX TK UKNMNL, EBX L GHM BG HN K LMT KL U NM BG HNK LXEOXL.(空格是為了和上排對齊)
只需重排密碼表二十六個字母的順序,允許密碼表是明碼表的任意一種重排,密鑰就會增加到四千億億億多種,我們就有超過4×1027種密碼表。破解就變得很困難。
如何破解包括愷撒密碼在內的單字母替換密碼?
方法:字母頻度分析
盡管我們不知道是誰發現了字母頻度的差異可以用於破解密碼。但是9世紀的科學家阿爾·金迪在《關於破譯加密信息的手稿》對該技術做了最早的描述。
「如果我們知道一條加密信息所使用的語言,那麼破譯這條加密信息的方法就是找出同樣的語言寫的一篇其他文章,大約一頁紙長,然後我們計算其中每個字母的出現頻率。我們將頻率最高的字母標為1號,頻率排第2的標為2號,第三標為3號,依次類推,直到數完樣品文章中所有字母。然後我們觀察需要破譯的密文,同樣分類出所有的字母,找出頻率最高的字母,並全部用樣本文章中最高頻率的字母替換。第二高頻的字母用樣本中2號代替,第三則用3號替換,直到密文中所有字母均已被樣本中的字母替換。」
以英文為例,首先我們以一篇或幾篇一定長度的普通文章,建立字母表中每個字母的頻度表。
在分析密文中的字母頻率,將其對照即可破解。
雖然設密者後來針對頻率分析技術對以前的設密方法做了些改進,比如說引進空符號等,目的是為了打破正常的字母出現頻率。但是小的改進已經無法掩蓋單字母替換法的巨大缺陷了。到16世紀,最好的密碼破譯師已經能夠破譯當時大多數的加密信息。
局限性:
短文可能嚴重偏離標准頻率,假如文章少於100個字母,那麼對它的解密就會比較困難。
而且不是所有文章都適用標准頻度:
1969年,法國作家喬治斯·佩雷克寫了一部200頁的小說《逃亡》,其中沒有一個含有字母e的單詞。更令人稱奇的是英國小說家和評論家吉爾伯特·阿代爾成功地將《逃亡》翻譯成英文,而且其中也沒有一個字母e。阿代爾將這部譯著命名為《真空》。如果這本書用單密碼表進行加密,那麼頻度分析破解它會受到很大的困難。
一套新的密碼系統由法國外交家維熱納爾(Blaise de Vigenère)於16世紀末確立。其密碼不再用一個密碼表來加密,而是使用了26個不同的密碼表。這種密碼表最大的優點在於能夠克制頻度分析,從而提供更好的安全保障。
Ⅲ 經典密碼的原理
經典密碼大致上分為替代式密碼和移位式密碼,具體原理看下面加粗字體
凱撒密碼是廣為人知的替代式密碼。為了用凱撒密碼法加密訊息,每個密碼字母集中的字母將會被其位置的後3個字母替代。因此字母A將會被字母D替代、字母B將會被字母E替代、字母C將會被字母F替代等,最後,X、Y和Z將分別的被替代成A、B和C。
例如,"WIKIPEDIA"將被加密成"ZLNLSHGLD"。凱撒把字母向後移"3"位,但其他數字也可照著作。
另一種替代式密碼是使用關鍵字,你可以選擇一個單字或是短片語並去除所有的空格和重復的字母,接著把它當作密碼字母集的開頭。最後記得去除掉關鍵字的字母把其它字母接續排序。
移位式密碼,它們字母本身不變,但它們在訊息中順序是依照一個定義明確的計劃改變。許多移位式密碼是基於幾何而設計的。一個簡單的加密(也易被破解),可以將字母向右移1位。
例如,明文"Hello my name is Alice."將變成"olleH ym eman si ecilA."。密碼棒(scytale)也是一種運用移位方法工具。
一個移位式密碼的具體例子columnar cipher.先選擇一個關鍵字,把原來的訊息由左而右、由上而下依照關鍵字長度轉寫成長方形。接著把關鍵字的字母依照字母集順序編號,例如A就是1、B就是2、C就是3等。例如,關鍵字是CAT,明文是THE SKY IS BLUE,則訊息應該轉換成這樣:
C A T 3 1 20 T H E S K Y I S B L U E最後把訊息以行為單位,依照編號大小調換位置。呈現的應該是A行為第一行、C行為第二行、T行為第三行。然後就可以把訊息"The sky is blue"轉寫成HKSUTSILEYBE。
經典密碼的破譯
經典密碼由於規律性很強,通常很容易被破解。許多經典密碼可單單經由密文而破解,所以它們容易受到唯密文攻擊法攻擊(ciphertext-only attack)。
有些經典密碼(像是凱撒密碼)的金鑰個數有限,所以這類密碼可以使用暴力破解嘗試所有的金鑰。替代式密碼有比較大的金鑰數,但是容易被頻率分析,因為每個密碼字母各代表了一個明文字母。
另一方面,現代密碼的設計可以承受更強大的ciphertext-only attacks。一個優秀的現代密碼必須保證廣泛潛在的攻擊,包括known-plaintext attack和chosen-plaintext attack以及chosen-ciphertext attack。
對於密碼破解者來說,應不能夠找到關鍵,即使他知道明文和對應的密碼文、即是他可以選擇明文或密碼文。經典密碼再也不能滿足這些強大的標准,因此,有興趣者再也不拿它來做安全應用了。
以上內容參考網路-經典密碼
Ⅳ 什麼是古典加密演算法
古典加密演算法分為替代演算法和置換移位法。
1、替代演算法
替代演算法用明文的字母由其他字母或數字或符號所代替。最著名的替代演算法是愷撒密碼。凱撒密碼的原理很簡單,其實就是單字母替換。
例子:
明文:abcdefghijklmnopq
密文:defghijklmnopqrst
2、置換移位法
使用置換移位法的最著名的一種密碼稱為維吉尼亞密碼。它以置換移位為基礎的周期替換密碼。
在維吉尼亞密碼中,加密密鑰是一個可被任意指定的字元串。加密密鑰字元依次逐個作用於明文信息字元。明文信息長度往往會大於密鑰字元串長度,而明文的每一個字元都需要有一個對應的密鑰字元,因此密鑰就需要不斷循環,直至明文每一個字元都對應一個密鑰字元。
其他常見的加密演算法
1、DES演算法是密碼體制中的對稱密碼體制,把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位。
2、3DES是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
3、RC2和RC4是對稱演算法,用變長密鑰對大量數據進行加密,比DES快。
4、IDEA演算法是在DES演算法的基礎上發展出來的,是作為迭代的分組密碼實現的,使用128位的密鑰和8個循環。
5、RSA是由RSA公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的,非對稱演算法。
6、DSA,即數字簽名演算法,是一種標準的 DSS(數字簽名標准),嚴格來說不算加密演算法。
7、AES是高級加密標准對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael演算法。
Ⅳ 什麼是凱撒密碼謝謝!
凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。例如,如果密匙是把明文字母的位數向後移動三位,那麼明文字母B就變成了密文的E,依次類推,X將變成A,Y變成B,Z變成C,由此可見,位數就是凱撒密碼加密和解密的密鑰。 它是一種代換密碼。據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。 在密碼學中,愷撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。例如,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推。這個加密方法是以愷撒的名字命名的,當年愷撒曾用此方法與其將軍們進行聯系。愷撒密碼通常被作為其他更復雜的加密方法中的一個步驟,例如維吉尼亞密碼。愷撒密碼還在現代的ROT13系統中被應用。但是和所有的利用字母表進行替換的加密技術一樣,愷撒密碼非常容易被破解,而且在實際應用中也無法保證通信安全。
Ⅵ 愷撒密碼表是什麼
愷撒密碼表是一種代換密碼。據說凱撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。
Ⅶ 關於凱撒密碼的一些問題
這個程序,允許輸入一串小寫英文,如:goodbey,然後將它們變成密碼:jrrgehb。
變換規律是:按照英文字母表,明文字母向下第三個,就是密碼。
見插圖。
charM[100];//明文、密碼的存放空間
charC[100];
intK=3,i;//K=3,向下第三個
printf("請輸入明文M(注意不要輸入空白串) ");//顯示
gets(M);//輸入
for(i=0;M[i]!='