凯撒加密
前言
这是我的第一篇博客希望以后多多关注。
这篇文章起源于我在人工智能导论上的一次摸鱼◔ ‸◔,当时老师一节课都在脱离课本介绍,讲什么网络安全之类的问题,后面还举例子了一些加密方法巴拉巴拉,然后就开始介绍起来了凯撒加密,让大家找规律,我觉得还蛮有意思,而且比较简单,这个东西,然后在可以手动完成加密的基础上,想要体现一下俺2年算法水平,然后就尝试的实现了一下(。◕‿◕。)。
这个是当时的题目的PPT,老师让我猜一下如果密钥是DOCUMENT的话,这个密文是啥(揉眼睛 ( ‘-ωก̀ )。
第一次看这个PPT的时候,让猜凯撒加密的原理其实,一看有点难的亚子(•ิ_•ิ),但就在一瞬间突然明白辽,还是很简单的(..•˘_˘•..)。
我来介绍一下原理吧๑乛◡乛๑:
首先第一步是确定密钥的字母顺序,按照字母表来排序,所以A上面是1,然后以此类推R上面就是6了。
然后就是把原文从左往右,从上到下,在密钥下面写下去,然后就会得到这个ppt左部分这个不完整的矩阵了。再按照密钥的字母顺序从上到下来读取,就可以获得密文了,是不是很简单呀,这个手动算凯撒加密,于是我就想要使用程序做出来,由于最近再学java,于是我就要来展示一下我的java水平了。于是一个小时过后,我就写出来了我的代码(没错我写了一个小时,一部分是Java的API还不是很熟,另一个方面是,这个算法确实好几个恶心的地方QWQ)。
具体代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入秘钥:"); ArrayList<Character> key_arraylist = new ArrayList<>(); String key = in.nextLine(); // <1.1> int len_key = key.length(); // 把密钥中的字母提取出来,然后放入列表中进行排序 for (int i = 0; i < len_key; ++ i) { key_arraylist.add(key.charAt(i)); } key_arraylist.sort(new Comparator<Character>(){ // 对密钥字母排序 @Override public int compare(Character o1, Character o2){ int num = 0; if (o1 > o2) num = 1; else if (o1 == o2) num = 0; else num = -1; return num; } }); // 构建哈希表 根据列表中的顺序 来对每个字母构建映射 HashMap<Character, Character> map = new HashMap<>(); for (int i = 0; i < len_key; ++ i) { map.put(key_arraylist.get(i), (char)(i + '0')); // System.out.println(key_arraylist.get(i) + " " + (char)(i + '0'));