java中char是16位无符号整数,可与int直接运算;凯撒密码利用unicode码点实现字母循环移位,仅加密a–z和a–z,大小写分别处理,非字母字符保留原样。

在 Java 中,char 本质是 16 位无符号整数,可直接与 int 类型进行数值运算;利用字符与其 Unicode 码点之间的映射关系,就能轻松实现凯撒密码(Caesar Cipher)——即对字母按固定偏移量平移。
理解 char 和 int 的自动转换机制
Java 允许 char 与 int 直接赋值或计算,因为 char 在参与算术运算时会自动提升为 int。例如:
-
'a' + 0得到97(小写 a 的 Unicode 码点) -
(char)97转回'a' -
'z' + 3是125,但直接转(char)会超出字母范围,需手动取模处理
只加密英文字母,保持大小写和非字母字符不变
凯撒密码通常只作用于 a–z 和 A–Z,其他字符(空格、数字、标点)原样保留。关键是要在字母范围内做“循环移位”:
- 对小写字母:先减
'a'(归零到 0–25),加偏移量后对 26 取模,再加'a' - 对大写字母:同理,用
'A'作基准 - 非字母字符不处理,直接追加到结果中
实现一个安全的加密方法(含解密)
下面是一个简洁可靠的实现,支持正负偏移(负偏移即解密):
<font size="2"><pre class="brush:php;toolbar:false;">public static String caesar(String text, int shift) {
if (text == null) return null;
StringBuilder result = new StringBuilder();
for (char c : text.toCharArray()) {
if (c >= 'a' && c = 'A' && c
说明:(offset + 26) % 26 确保即使 shift 为负(如解密用 -3),结果仍在 0–25 区间。
使用示例与验证
比如加密 "Hello, World!" 偏移 3:
-
caesar("Hello, World!", 3)→"Khoor, Zruog!" - 再用
caesar("Khoor, Zruog!", -3)→"Hello, World!",完成闭环 - 注意:中文、emoji 等 Unicode 字符不会被误处理,因判断条件严格限定在 ASCII 字母范围
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











