多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把**字母移动一定的位数**来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 变成 E,由此可见,位数就是凯撒密码加密和解密的密钥。 例如:字符串”ABC”的每个字符都右移 3 位则变成”DEF”,解密的时候”DEF”的每个字符左移 3 位即能还原,如下图所示: ![](https://box.kancloud.cn/c1219fe09be03a46b44a4744dca19bcc_740x334.jpg) ~~~ 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. } ~~~ ![](https://box.kancloud.cn/3664ecd826172bb9ed0d982050d9591c_909x603.jpg) 1. 破解凯撒密码:频率分析法 凯撒密码加密强度太低,只需要用频度分析法即可破解。 在任何一种书面语言中,不同的字母或字母组合出现的频率各不相同。而且,对于以这种语言书写的 任意一段文本,都具有大致相同的特征字母分布。比如,在英语中,字母 E 出现的频率很高,而 X 则出现 得较少。 英语文本中典型的字母分布情况如下图所示: ![](https://box.kancloud.cn/3e280259e56c91c089005aadfebf7539_763x611.jpg) 破解流程: 1,统计密文里出现次数最多的字符,例如出现次数最多的字符是是’h’。 2,计算字符’h’到’e’的偏移量,值为 3,则表示原文偏移了 3 个位置。 3,将密文所有字符恢复偏移 3 个位置。 注意点:统计密文里出现次数最多的字符时,需多统计几个备选,因为最多的可能是空格或者其他字符,例如下图出现次数最多的字符'#'是空格加密后的字符,‘h'才是'e’偏移后的值。