说到密码,不得不提的经典就是凯撒密码了,别小看这玩意儿,就是密码界的祖师爷!想象一下,凯撒大帝带着他的军团,给密信轰砸上提前设置的“魔法转轮”,让敌军抓瞎。今天咱们就用Java来实现这个转轮,还得搞得灵活又好玩,谁说写代码不能像玩游戏一样带感?
凯撒密码其实就是个移位密码,比如你用“秘密”这个词,按照一个固定的数字位移字母,比如往后移3位,‘a’变‘d’,‘b’变‘e’,依次类推。你得想象26个字母排成一个圈,超过‘z’就从‘a’重新开始循环。牛逼吧?
别以为它简单就不值一提,这玩意早期用得贼6,哪怕现在被破解得不要不要的,也绝对是学习加密算法的小钢炮。
### Java实现凯撒密码加密
代码部分先不要紧张,咱们一步步撸,核心就是字符处理和循环移位。能用char玩出花的,那实力在这儿!
public class CaesarCipher {
/** 加密函数:对输入字符串里的字母进行位移加密,非字母保持原样 */
public static String encrypt(String input, int shift) {
StringBuilder encrypted = new StringBuilder();
for (char ch : input.toCharArray()) {
if (Character.isUpperCase(ch)) {
char c = (char) ('A' + (ch - 'A' + shift) % 26);
encrypted.append(c);
} else if (Character.isLowerCase(ch)) {
char c = (char) ('a' + (ch - 'a' + shift) % 26);
encrypted.append(c);
} else {
encrypted.append(ch); // 非字母原样输出
}
}
return encrypted.toString();
}
}
这里咱们用了模运算“% 26”来保证循环,搬砖就靠它了。对于大小写字母分类处理保证了“大小写友好”,谁叫这是剑走偏锋的现代代码呢。
### 解密函数,破解神技能上线!
加密后想还原?别以为简单,解密其实是反向移位。简单来说,就是把加密时的“+ shift”换成“- shift”。函数几乎复用加密函数,只是参数换成了负数。
public static String decrypt(String input, int shift) {
return encrypt(input, 26 - shift % 26); // 26 - shift保证反向移位
}
不带你玩什么变形金刚,直接反推就对了,稳稳的幸福感来了。
### 扩展:支持数字和符号也能玩转?
有人说:“数字和符号怎么办?它们也是信息啊!”别急,凯撒密码天然弱鸡,所以要想通杀,全靠后期花样了。常用手段是加数字移位,符号保持原样,或者都转到ASCII码上运算再还原。
public static String encryptWithNumbers(String input, int shift) {
StringBuilder encrypted = new StringBuilder();
for (char ch : input.toCharArray()) {
if (Character.isLetter(ch)) {
encrypted.append(encrypt(String.valueOf(ch), shift));
} else if (Character.isDigit(ch)) {
char c = (char) ('0' + (ch - '0' + shift) % 10);
encrypted.append(c);
} else {
encrypted.append(ch); // 其他符号保持原样
}
}
return encrypted.toString();
}
这个版本更适合日常码字操作,毕竟密码不动声色,效果立马见证!
### 说说性能?
凯撒密码算不上重量级算法,咱这几十行代码跑起来,那速度杠杠滴,适合入门和学习理解字符运算,跑大批量数据?可能没啥大用,毕竟安全性摆在那里……
想体验更高难度的加密?先搞定凯撒密码再说,毕竟基础不牢,地动山摇!
### 代码演示互动环节
咱来搞个小小游戏,想象一下你是拉开密码箱的密探,密码是“HelloWorld”,位移5后出来啥?打字入坑,写代码跑起来再回来告诉我,简直停不下来!
顺便动漫宅党福利来了,玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,别说我没告诉你。
好了,凯撒密码的大门敞开了,是继续用Java撸写加密,还是去五个字母里找秘密?你说!