目錄
- 開頭
- 程序
- 程序的流程圖
- 程序加密與解密的效果
- 例1
- 加密的過程
- 加密之后的文本
- 例2
- 解密之后的文本
- 解密之后的文本
- 例3
- 加密之后的文本
- 加密之后的文本
- 結尾
開頭
大家好,我叫這是我58。今天,我們來看一下我用C語言編譯的升級版凱撒密碼加密解密器和與之相關的一些東西。
程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void caeser(char* str, int ik) {int im = 0;int ima = 0;int i = 0;printf("偏移量為多少?(整數) -> ");scanf("%d", &im);im %= 95, ik && (im = -im), ima = im;for (; i < strlen(str); i++) {for (ima = im; ima;) {ima > 0 && str[i]++, ima > 0 || str[i]--;127 == str[i] && (str[i] = ' '), 31 == str[i] && (str[i] = '~');ima > 0 && ima--, ima < 0 && ima++;}}
}
int main() {int ik = 0;char str[99999] = "";while (1) {char ck[] = "加";printf("你要加密還是解密?(0加密,非0解密) -> ");scanf("%d", &ik);if (ik) {strcpy(ck, "解");}printf("請輸入你要凱撒密碼%s密的文本(不能有不可以顯示的字符) -> ", ck);char* pc = str;do {scanf("%s", str);pc = str;for (; *pc > 31 && *pc < 127; pc++) {;}if ('\0' != *pc) {printf("輸入錯誤,請重新輸入 -> ");}} while ('\0' != *pc);caeser(str, ik);printf("%s密之后的文本 -> %s\n------------------------------------------------\n", ck, str);}return 0;
}
程序的流程圖
程序加密與解密的效果
例1
加密的過程
你要加密還是解密?(0加密,非0解密) -> 0
請輸入你要凱撒密碼加密的文本(不能有不可以顯示的字符) -> 114514
偏移量為多少?(整數) -> 1919180
加密之后的文本
加密之后的文本 -> ‘’*+'*
例2
解密之后的文本
你要加密還是解密?(0加密,非0解密) -> 1
請輸入你要凱撒密碼解密的文本(不能有不可以顯示的字符) -> ‘’*+'*
偏移量為多少?(整數) -> 1919180
解密之后的文本
解密之后的文本 -> 114514
例3
加密之后的文本
你要加密還是解密?(0加密,非0解密) -> 0
請輸入你要凱撒密碼加密的文本(不能有不可以顯示的字符) -> Hello,world!
偏移量為多少?(整數) -> -6
加密之后的文本
加密之后的文本 -> B_ffi&qilf^z
結尾
這就是我的用C語言編譯的升級版凱撒密碼加密解密器,有95種偏移量可供你選擇,不過,凱撒密碼其實既不能獲得更大的安全性,而且也是非常能夠容易破解出來的1,具體如下。
即使使用唯密文攻擊,愷撒密碼也是一種非常容易破解的加密方式。可能有兩種情況需要考慮:
1.攻擊者知道(或者猜測)密碼中使用了某個簡單的替換加密方式,但是不確定是愷撒密碼;
2.攻擊者知道(或者猜測)使用了愷撒密碼,但是不知道其偏移量。
對于第一種情況,攻擊者可以通過使用諸如頻率分析或者樣式單詞分析的方法, [3]馬上就能從分析結果中看出規律,得出加密者使用的是愷撒密碼。
對于第二種情況,解決方法更加簡單。由于使用愷撒密碼進行加密的語言一般都是字母文字系統,因此密碼中可能是使用的偏移量也是有限的,例如使用26個字母的英語,它的偏移量最多就是25(偏移量26等同于偏移量0,即明文;偏移量超過26,等同于偏移量1-25)。因此可以通過窮舉法,很輕易地進行破解。其中一種方法是在表格中寫下密文中的某個小片段使用所有可能的偏移量解密后的內容——稱為候選明文,然后分析表格中的候選明文是否具有實際含義,得出正確的偏移量,解密整個密文。例如,被選擇出的密文片段是"EXXEGOEXSRGI",從右表中的候選明文,可以很快看出其正確的偏移量是4。也可以通過在每一個密文單詞的每一個字母下面,縱向寫下整個字母表其他字母,然后可以通過分析,得出其中的某一行便是明文。
另外一種攻擊方法是通過頻率分析。當密文長度足夠大的情況下,可以先分析密文中每個字母出現的頻率,然后將這一頻率與正常情況下的該語言字母表中所有字母的出現頻率做比較。例如在英語中,正常明文中字母E和T出現的頻率特別高,而字母Q和Z出現的頻率特別低,而在法語中出現頻率最高的字母是E,最低的是K和W。可以通過這一特點,分析密文字母出現的頻率,可以估計出正確的偏移量。此外,有時還可以將頻率分析從字母推廣到單詞,例如英語中,出現頻率最高的單詞是:the, of, and, a, to, in…。可以通過將最常見的單詞的所有可能的25組密文,編組成字典,進行分析。比如QEB可能是the,MPQY可能是單詞know(當然也可能是aden)。但是頻率分析也有其局限性,它對于較短或故意省略元音字母或者其他縮寫方式寫成的明文加密出來的密文進行解密并不適用。
另外,通過多次使用愷撒密碼來加密并不能獲得更大的安全性,因為使用偏移量A加密得到的結果再用偏移量B加密,等同于使用A+B的偏移量進行加密的結果。1
選自百度百科里的愷撒(凱撒)密碼 ?? ??