#include #include int main(void) { char str[] = "ESP BFTNV MCZHY QZI UFXAD ZGPC ESP WLKJ OZR ZQ NLPDLC LYO JZFC FYTBFP DZWFETZY TD TNSONDLMLOOL"; //对整个字符串循环,把1-25全部尝试一遍,i即为密钥 for(int i = 1; i < 26; i++) { //遍历字符串中的每个字符 for(int j = 0; j < strlen(str); j++) { if(str[j] == ' ') //如果j是空格,就将j原封不动地打印出来,因为我们需要划分单词 { printf("%c", str[j]); } else //如果不是空格,就将当前字符向后移动i位,i为当前轮的密钥 { printf("%c", (str[j] + i - 'A') % 26 + 'A'); //打印得到向后移动的密文 } } printf("\n\n"); } return 0; } 凯撒密码为移位密码,手工破解一般是将两位字母替换成is it be on me等单次, 三位字符替换成the等字符,出现最多的字符一般是e。 如果是如下字符 rjjy rj ts ymj xfggfym bj bnqq inxhzxxymj uqfs 穷举之后,最有可能的一句话是: MEET ME ON THE SABBATH WE WILL DISCUSSTHE PLAN ,其中 DISCUSSTHE 应该为 DISCUSS THE