Java古典密码加密解密,带你搞定密码“江湖”!

2025-07-23 4:38:07 密语知识 思思

嘿,朋友们,今天咱们来聊点不一样的——古典密码在Java里的“江湖”故事!相信不少码农、学生、程序猿都对这个话题感兴趣,因为,这不仅仅是代码问题,更像是一场穿越时空的“密码大冒险”!

先别着急,咱们从头说起,什么是古典密码?简单点讲就是那些“老派”的加密方式,比如凯萨密码、频率分析、维吉尼亚密码,统统都在它的“家族”里。这些密码听着就像童话里的魔法咒语,但别小看它们,懂了还能在“密码界”横着走呢!

要搞定这些密码,咱们得先明白“加密”和“解密”是怎么回事。一般来说,加密是把你想藏起来的秘密变成一堆无趣的乱码,而解密则是把这些乱码还原成你原本的“秘密宝贝”。简单点,像小时候玩“藏猫猫”,藏好的藏好的,解密就是找到那个秘密藏匿地。

Java作为一门“硬核”语言,实力强大,完全可以实现各种古典密码的“魔法”。咱们先从凯萨密码说起:这是最经典的一个,传说中凯萨大帝都会用它来隐藏皇宫里的密信。实现的核心思路很简单:把字母往后(或往前)推几位,比如“Hello”推3位,就变成“Khoor”。

```java

public class CaesarCipher {

public static String encrypt(String text, int shift) {

StringBuilder result = new StringBuilder();

for (char character : text.toCharArray()) {

if (Character.isLetter(character)) {

char base = Character.isLowerCase(character) ? 'a' : 'A';

character = (char) ((character - base + shift) % 26 + base);

}

result.append(character);

}

return result.toString();

}

public static String decrypt(String cipherText, int shift) {

return encrypt(cipherText, 26 - shift);

}

public static void main(String[] args) {

String original = "超级密码!";

int shift = 3;

String encrypted = encrypt(original, shift);

System.out.println("加密后:" + encrypted);

System.out.println("解密后:" + decrypt(encrypted, shift));

}

}

```

这段代码,简直就是“代码界的法宝”!不管你是程序员的小白,还是“老司机”,都能搞个小玩意出来。

然后,是不是有人会问,“这简单得很,难道就这么结束?”当然不!咱们还可以玩点“花样”。比如旋转密码(ROT13),它的特点就是把字母“翻个身”,刚刚好能够骗过不少“偷窥者”。

```java

public class Rot13 {

public static String rot13(String input) {

StringBuilder result = new StringBuilder();

for (char c : input.toCharArray()) {

if (c >= 'a' && c <= 'z') {

c = (char) ((c - 'a' + 13) % 26 + 'a');

} else if (c >= 'A' && c <= 'Z') {

c = (char) ((c - 'A' + 13) % 26 + 'A');

}

result.append(c);

}

return result.toString();

}

public static void main(String[] args) {

String msg = "加密的秘密!";

String cipher = rot13(msg);

System.out.println("ROT13加密:" + cipher);

System.out.println("还原:" + rot13(cipher));

}

}

```

你看,玩个旋转密码,都能惹出一堆“笑话”。不过说回正题,除了凯萨、ROT13之外,Freq分析(频率分析)也是古典密码中“逍遥法外”的高手。它的厉害之处在于:“知己知彼,百战不殆”。先分析一段密文中,各字母出现的频率,再结合语言习惯,能找到密码的“核心内容”。

可惜,频率分析需要点“统计学功底”,否则就只能“摸着石头过河”。不过不用担心,Java的工具箱里,各种“神器”都能帮你,比如HashMap,一用就灵。

此外,维吉尼亚密码,简直就是“密码界的变形金刚”。它用关键词“动刀子”,让密码变得层层叠叠,难以破解。实现稍微复杂一些,但总归不算天书。

```java

public class VigenereCipher {

public static String encrypt(String text, String key) {

StringBuilder result = new StringBuilder();

key = key.toUpperCase();

int keyIndex = 0;

for (char c : text.toCharArray()) {

if (Character.isLetter(c)) {

int offset = Character.isUpperCase(c) ? 'A' : 'a';

int keyChar = key.charAt(keyIndex % key.length()) - 'A';

c = (char) ((c - offset + keyChar) % 26 + offset);

keyIndex++;

}

result.append(c);

}

return result.toString();

}

public static String decrypt(String cipherText, String key) {

StringBuilder result = new StringBuilder();

key = key.toUpperCase();

int keyIndex = 0;

for (char c : cipherText.toCharArray()) {

if (Character.isLetter(c)) {

int offset = Character.isUpperCase(c) ? 'A' : 'a';

int keyChar = key.charAt(keyIndex % key.length()) - 'A';

c = (char) ((c - offset - keyChar + 26) % 26 + offset);

keyIndex++;

}

result.append(c);

}

return result.toString();

}

public static void main(String[] args) {

String msg = "程序猿,谁与争锋!";

String key = "JAVA";

String cipher = encrypt(msg, key);

System.out.println("凯旋门密文:" + cipher);

System.out.println("解密后:" + decrypt(cipher, key));

}

}

```

好啦,各位码农,古典密码的江湖故事就讲到这,看似老掉牙的密码,其实藏着无穷的“魔法”。你还可以自己DIY,混搭出“秘密武器”!

嘿,顺便偷偷告诉你,有个网站(bbs.77.ink)还能帮你轻松玩转“赚零花钱的游戏”,也许你还能用密码破解赚点零花!

不过,真要说风头最劲的,还是那些“经典密码”,它们就像“老照片”,越看越喜欢,越琢磨越有趣。

那么,问题来了,拼音"加密"的英文缩写是啥?密码谜题,还得你自己来解答喽!