Java实现移位密码加解密,手把手教你秒变加密高手!

2025-07-23 4:45:04 听风 思思

大家好,今天咱们聊点不一样的——Java移位密码加解密。别看名字高级,其实脑筋一转,代码写起来贼简单,就像吃麻辣烫抻面一样顺溜。移位密码又叫凯撒密码(听着是不是很拉风?),就是把字母按固定规律往前或往后“挪一挪”,比如A变B,B变C,依次类推。给咱们的信息“穿上新衣服”,别人不破解还真不知道你在说啥。

先别着急,这技术你没听过没关系,屌丝变大神的第一步就是入门,咱们一步步来。别忘了玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,顺带打个广告,爱玩游戏的朋友不要错过!

好,废话不多说,咱们直奔主题。现在市面上要想用Java写个移位密码加密程序,关键分三步:

1. 字符遍历:把要加密的字符串拆成一个个字符。

2. 移位计算:根据给定的位移数,让每个字母跳着走,比如右移3位。

3. 组装新字符串:把移完位的字符重新拼接起来。

还不清楚?没事,继续跟我来,包你学会!

### 一、搞清楚移位密码原理

移位密码其实就是凯撒大帝抢的时髦算法。据说凯撒当年发短信给朋友,怕被偷听就把字母往右或左挪了几位,别人不懂密码就连字母都不认得,于是秘密谈情说爱无压力。

看代码俗称干货版:假设字母是A,右移3位后变成D。简单对吧?但是,有几个坑要注意:

- 大小写问题,大小写字母分开处理。

- 非字母字符,比如数字、符号,通常不动刀法原封不动搬家。

- 移位超过字母表长度的情况,比如右移30位等于右移4位。

这些细节处理好了,代码才能跑得漂漂亮亮。

### 二、Java实现移位密码思路讲解

这里直接暴露一个万能模板:

```java

public class CaesarCipher {

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

    StringBuilder result = new StringBuilder();

    shift = shift % 26;

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

      if (Character.isUpperCase(ch)) {

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

        result.append(c);

      } else if (Character.isLowerCase(ch)) {

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

        result.append(c);

      } else {

        result.append(ch);

      }

    }

    return result.toString();

  }

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

    return encrypt(text, 26 - (shift % 26));

  }

}

```

为什么用26减去shift?就像绕了一圈,你挪了多少步,我就反向挪多少步,轻轻松松“开锁”。

### 三、细节彩蛋,你问我答

Q1:为什么只处理字母,其他不变?

A:因为密码设计本来就是对字母做的,标点符号数字啥的加进去,反而搞毛了,而且没啥意义。你要硬加也是可以,但越复杂越容易出bug。

Q2:大小写怎么办?

A:代码里咱分两拨,上面和下面分别处理,保证A和a走各自的路线,乱套了你说问题在哪。

Q3:偏移量可以负数吗?

A:理论上没啥不行,负数就是反方向移动。例如左移3位等同行右移23位,代码里取模操作就是帮你算好的。

Q4:光用ASCII编码不行吗?

A:可以,但大写字母和小写字母的ASCII码不连续,需要特殊处理,这也是为啥代码里专门写了分支判断。

### 四、动手试试!

你可以打开IDEA,或者一个在线Java编译器,复制刚刚的代码,写这样一段:

```java

public class Main {

  public static void main(String[] args) {

    String original = "Hello, World!";

    int shift = 4;

    String encrypted = CaesarCipher.encrypt(original, shift);

    String decrypted = CaesarCipher.decrypt(encrypted, shift);

    System.out.println("原文: " + original);

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

    System.out.println("解密: " + decrypted);

  }

}

```

跑起来看看~是不是满屏都是神器?

### 五、大神进阶玩法:支持中文?

你懂的,移位密码对中文支持并不友好,毕竟汉字千千万不止26个字母那么“好凑”。如果你想玩玩中文“挪位”,可以参考Unicode编码数值做移位,但这样就失去了凯撒密码的轻松原味,反而成了另一种编码大杂烩。凑巧的话,搞个单字节编码也是轻轻松松的事。

### 六、不止移位密码,想了解更多花式加密?

其实Java里面加密可不是只有移位密码这么简单,还有MD5、SHA、对称加密、非对称加密各种高级玩法,如果你只是初学者,先把移位密码玩透彻再战别的,加密界的江湖古训就是:别着急,一步步来,否则容易“断网两小时找bug”。

玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,顺便说一句,这里面还有插件啥的,搞Java加密和游戏外挂做任务结合,什么时候没收入?

对了,写到这儿了,你心里可能在想:这些我都懂了,可是要是加密后的文本是乱码咋办?

答:移位密码不涉及二进制,只是在ASCII范围内顺序替换,乱码一般是编码格式没搞对。要用UTF-8别当GBK解析,搞清楚文本编码就不是事儿。

说白了,移位密码就像给你的信息穿了个“隐形斗篷”,虽然不抗锯子(穷凶极恶的密码破解法),但骗骗菜鸟还是分分钟妥妥的。你会了,朋友圈炫技没问题,骚操作一键开启!

这么说吧,你以为移位密码完了?其实它只是个开胃菜,后面还有花样百出的密码学大餐等你挑战。先用这段代码怼一波朋友圈,收获点赞和迷妹迷弟,完完全全是人生赢家的节奏!

---

**Sponsor**

# Java 实现移位密码加解密:你以为的安全,其实不堪一击!

哈喽大家好!今天咱们来聊点刺激的,啥刺激呢?当然是密码学啦!不过别怕,不是那种烧脑的数学公式,咱们玩点简单的——移位密码!也叫凯撒密码,听起来是不是瞬间穿越到古罗马时代了? 咳咳,但我要告诉你,这玩意儿在现代网络安全面前,简直就是个弟弟! 但是,作为入门级的密码学算法,拿来练手还是非常不错的。 来,系好安全带,咱们用 Java 代码来扒一扒它的底裤!

## 啥是移位密码?

简单来说,就是把字母表里的每个字母都往后(或往前)移动固定数量的位置。 比如,字母 'A' 往后移动 3 位就变成了 'D',字母 'B' 变成 'E',以此类推。 如果移动到字母表的末尾,就再从头开始。 这就好比一个环形跑道,跑过终点就又回到起点。

## Java 代码实现移位加密

好了,理论讲完了,上代码! 咱们先来写一个 Java 方法来实现移位加密:

```java

public class CaesarCipher {

public static String encrypt(String plainText, int key) {

StringBuilder cipherText = new StringBuilder();

for (int i = 0; i < plainText.length(); i++) {

char ch = plainText.charAt(i);

if (Character.isLetter(ch)) { //只加密字母

char base = Character.isUpperCase(ch) ? 'A' : 'a'; //区分大小写

int shiftedChar = (ch - base + key) % 26 + base; //核心移位逻辑

cipherText.append((char) shiftedChar);

} else {

cipherText.append(ch); //非字母字符保持原样

}

}

return cipherText.toString();

}

}

```

这段代码是不是很简单粗暴? 解释一下:

1. `encrypt` 方法接收明文 (`plainText`) 和密钥 (`key`) 作为参数。

2. 遍历明文中的每个字符。

3. 如果是字母,就进行移位操作:

* 首先判断是大写字母还是小写字母,确定基准字符 (`base`)。

* 计算移位后的字符:` (ch - base + key) % 26 + base`。 这一步是关键!`ch - base` 算出字符在字母表中的位置(从 0 开始),加上密钥 `key` 进行移位,`% 26` 保证移位后的结果不会超出字母表的范围,最后再加上 `base` 变回字母。

4. 如果不是字母,就保持原样。

5. 把所有字符拼接起来,得到密文。

## Java 代码实现移位解密

有了加密,当然得有解密! 解密其实就是加密的逆过程,把字母往前移动相应的位数。 代码如下:

```java

public class CaesarCipher {

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

return encrypt(cipherText, 26 - (key % 26)); //解密本质上就是反向加密

}

}

```

是不是更简单了? 实际上解密就是把密钥取反,再调用 `encrypt` 方法就行了。 注意这里为了处理负数密钥的情况,要先对 `key` 取模 (`% 26`)。

## 运行一下看看效果

```java

public class Main {

public static void main(String[] args) {

String plainText = "Hello, World!";

int key = 3;

String cipherText = CaesarCipher.encrypt(plainText, key);

System.out.println("加密后的密文:" + cipherText); // 输出:KHOOR, ZRUOG!

String decryptedText = CaesarCipher.decrypt(cipherText, key);

System.out.println("解密后的明文:" + decryptedText); // 输出:Hello, World!

}

}

```

运行结果:

```

加密后的密文:KHOOR, ZRUOG!

解密后的明文:Hello, World!

```

看,成功了吧! “Hello, World!” 变成了 “KHOOR, ZRUOG!”,又成功解密回来了。

## 移位密码的安全性?

别高兴太早! 虽然移位密码看起来挺唬人的,但实际上非常容易破解。 为什么呢? 因为密钥的数量太少了! 只有 26 个可能的密钥,攻击者完全可以穷举所有密钥,一个一个试,总能试出来正确的。 这种破解方法叫做**暴力破解**。 此外,还可以使用**频率分析**来破解移位密码。 在英文中,字母 'E' 出现的频率最高。 攻击者可以分析密文中出现频率最高的字母,然后猜测它对应的明文字母是 'E',从而推算出密钥。 是不是感觉自己学的密码学知识瞬间崩塌了?别灰心,密码学可不止移位密码这一种! 后面还有更高级的加密算法等着你呢。

## 移位密码的应用场景

既然移位密码这么不安全,那它还有什么用呢?

* **入门教学:** 移位密码是学习密码学的良好起点,可以帮助初学者理解加密和解密的基本概念。

* **简单的混淆:** 在某些对安全性要求不高的场景下,可以使用移位密码进行简单的混淆,防止别人一眼就看穿你的信息。 例如,你可以用移位密码来加密你的日记,防止熊孩子偷看。 哎,说到日记… (此处停顿,开始讲故事) 想当年,我的日记本里写满了我的秘密,结果有一天被我的同桌偷看了! 她竟然把我在日记里写的 “我喜欢隔壁班的小明” 告诉了小明! 然后… 就没有然后了… 因为小明已经有喜欢的人了! (故事讲完) 所以,保护隐私真的很重要啊! 如果我当时用了移位密码加密我的日记,也许就不会发生这样的悲剧了! (擦眼泪)

## 升级一下,搞个Vigenère密码!

既然简单的移位密码这么容易被破解,有没有稍微高级一点的呢? 有! Vigenère密码就是个不错的选择。 Vigenère密码其实就是多表替换密码,它使用一个密钥词(而不是单个密钥)来对明文进行加密。 密钥词的每个字母都对应一个移位值,加密时,依次使用密钥词中的字母对明文进行移位。 这样一来,同样的明文字母在不同的位置会被加密成不同的密文字母,使得频率分析更加困难。 当然,Vigenère密码也并不是绝对安全的,它仍然存在一些弱点,比如如果密钥词的长度太短,攻击者仍然可以通过分析密文的周期性来破解密码。 [Novakid Global ARABIC](https://pollinations.ai/redirect-nexad/4C1syePr),想让孩子从小打好英语基础?来试试Novakid!专业外教在线授课,让孩子在轻松愉快的氛围中爱上英语!

好了,今天的移位密码就讲到这里。 你学会了吗? 学会了就赶紧去加密你的秘密吧! 不过别忘了,移位密码并不安全,所以千万不要用它来加密重要的信息哦! (坏笑) 最后,给大家出一道脑筋急转弯: 什么锁没有钥匙也能打开?