凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把**字母移動一定的位數**來實現加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文。例如,當偏移量是 3 的時候,所有的字母 A 將被替換成 D,B 變成 E,由此可見,位數就是凱撒密碼加密和解密的密鑰。
例如:字符串”ABC”的每個字符都右移 3 位則變成”DEF”,解密的時候”DEF”的每個字符左移 3 位即能還原,如下圖所示:

~~~
1. package com;
2.
3. public class KaiSaEncrypted {
4.
5. private static final String str = "hello meinv!";
6. private static final int pwd = 6;
7. public static void main(String[] args) {
8. String encrypte = encrypte(str);
9. System.out.println("加密后的文本:"+encrypte);
10. String decrypted = decrypted(encrypte);
11. System.out.println("解密后的文本:"+decrypted);
12. }
13.
14. public static String encrypte(String original){
15. char[] charArray = str.toCharArray();
16. for (int i = 0; i < charArray.length; i++) {
17. charArray[i]+= pwd;
18. }
19. return new String(charArray);
20. }
21.
22. public static String decrypted(String original){
23. char[] charArray = original.toCharArray();
24. for (int i = 0; i < charArray.length; i++) {
25. charArray[i]-= pwd;
26. }
27. return new String(charArray);
28. }
29. }
~~~

1. 破解凱撒密碼:頻率分析法
凱撒密碼加密強度太低,只需要用頻度分析法即可破解。
在任何一種書面語言中,不同的字母或字母組合出現的頻率各不相同。而且,對于以這種語言書寫的
任意一段文本,都具有大致相同的特征字母分布。比如,在英語中,字母 E 出現的頻率很高,而 X 則出現
得較少。
英語文本中典型的字母分布情況如下圖所示:

破解流程:
1,統計密文里出現次數最多的字符,例如出現次數最多的字符是是’h’。
2,計算字符’h’到’e’的偏移量,值為 3,則表示原文偏移了 3 個位置。
3,將密文所有字符恢復偏移 3 個位置。
注意點:統計密文里出現次數最多的字符時,需多統計幾個備選,因為最多的可能是空格或者其他字符,例如下圖出現次數最多的字符'#'是空格加密后的字符,‘h'才是'e’偏移后的值。