移位密码加密解密代码,手把手教你玩转古老秘密武器!

2025-08-10 20:39:49 密语知识 思思

哈喽,小伙伴们!今天咱们来聊聊一门神秘而又带点“复古风”的加密艺术——移位密码(Caesar Cipher)!听名字就像间谍电影里的暗号,坦白说,用移位密码来逗朋友玩,或者写个小秘密,可是很有趣的哦。还不会写代码?别怕,接下来我带你扒拉扒拉移位密码的加密和解密代码,实现原理简单得像数1、2、3,超级适合编程入门爆肝的小可爱们!说不定以后还能秀给那个Ta看哩。

先说说啥是移位密码吧,别吓着,名字很长但其实原理就是把字母表里的字母往后(或往前)移动N位,比如字母A往右移3位就变成D,B变E,……讲地通俗点,移位密码就是变换字母位置的“搬砖工”。而且,这招很适合入门密码学和做点小游戏揭秘~

?? 关于移位密码的核心逻辑其实就2句代码:对每个字符取它的ASCII码值,进行偏移操作,最后转换回字符就搞定了。那咱们用几门语言来看看怎么实现?顺便撸点常见坑,免得你写代码写到怀疑人生。

一、Python版移位密码加密、解密示范

Python简直是新手福音,语法简单,敲一敲就能拿结果。下面示范一个简单的字符串加密函数,假如偏移量为3:

def caesar_encrypt(text, shift):

result = ""

for char in text:

if char.isalpha(): # 只有字母才动手脚

start = ord('A') if char.isupper() else ord('a')

# 循环移动,这里用模运算保证超过'z'回到'a'

result += chr((ord(char) - start + shift) % 26 + start)

else:

result += char # 非字母原样带过

return result

def caesar_decrypt(text, shift):

return caesar_encrypt(text, -shift) # 解密就是反向加密

只要你丢进去“HELLO WORLD”和偏移量3,输出就是“KHOOR ZRUOG”,是不是感觉瞬间进入了007片场?

二、JavaScript版轻松实现在线版本

浏览器跑的代码就更方便,可以直接拿来改造加密聊天应用。代码长得跟Python类似逻辑:

function caesarEncrypt(text, shift) {

let result = "";

for(let i = 0; i < text.length; i++) {

let char = text[i];

if(/[a-z]/.test(char)) {

let code = ((char.charCodeAt(0) - 97 + shift) % 26) + 97;

result += String.fromCharCode(code);

} else if(/[A-Z]/.test(char)) {

let code = ((char.charCodeAt(0) - 65 + shift) % 26) + 65;

result += String.fromCharCode(code);

} else {

result += char;

}

}

return result;

}

function caesarDecrypt(text, shift) {

return caesarEncrypt(text, 26 - shift);

}

这段代码直接放浏览器调试console,可以一百遍推敲,毕竟写代码就得一遍遍瞎折腾。

三、Java版大厂风范,但也不失轻松

Java强调类型安全,代码稍多但内涵依旧:“一顿操作猛如虎”,出来的效果很威风:

public class CaesarCipher {

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

StringBuilder result = new StringBuilder();

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

if (Character.isLetter(ch)) {

char base = Character.isUpperCase(ch) ? 'A' : 'a';

char shifted = (char) ((ch - base + shift) % 26 + base);

result.append(shifted);

} else {

result.append(ch);

}

}

return result.toString();

}

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

return encrypt(input, 26 - shift);

}

}

如果你用IDE运行,还能顺带把代码改写成我行我素的变形操作,毕竟开发要有自己的style嘛。

四、C++小白不可错过的版本

C++对效率要求较高,代码稍显唬人,但其实逻辑差不多,照着搬复制粘贴也能玩:

#include <iostream>

#include <cctype>

using namespace std;

string caesarEncrypt(string text, int shift) {

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

if (isalpha(text[i])) {

char base = isupper(text[i]) ? 'A' : 'a';

text[i] = (text[i] - base + shift) % 26 + base;

}

}

return text;

}

string caesarDecrypt(string text, int shift) {

return caesarEncrypt(text, 26 - shift);

}

int main() {

string input = "Hello World!";

int shift = 3;

cout << "Encrypted: " << caesarEncrypt(input, shift) << endl;

cout << "Decrypted: " << caesarDecrypt(caesarEncrypt(input, shift), shift) << endl;

return 0;

}

五、Bash脚本实现,用命令行玩加密

对了,喜欢命令行的同学也可以试试Bash版本,加密思路就是用printf跟ASCII码操作,这里给个简易版本:

#!/bin/bash

shift=$1

text=$2

encrypted=""

for (( i=0; i<${#text}; i++ )); do

c=${text:$i:1}

if [[ "$c" =~ [a-zA-Z] ]]; then

ascii=$(printf "%d" "'$c")

if [[ "$c" =~ [A-Z] ]]; then

base=65

else

base=97

fi

offset=$(( (ascii - base + shift) % 26 ))

new_char=$(printf "\\$(printf '%03o' $((offset + base)))")

encrypted+=$new_char

else

encrypted+=$c

fi

done

echo "$encrypted"

用法示范:./caesar.sh 3 HelloWorld

好了,玩了代码,再聊聊点实用小技巧和trick:

?? 移位密码其实不安全,破解起来超级简单——暴力破解法直接轮一通26个偏移量就没了,分分钟揭开“神秘面纱”,所以千万别拿它存私房钱密码哈,只适合“看热闹”。

?? 用移位密码时大小写要注意保持一致或者先统一变成大/小写再处理,不然加密效果会差点意思。

?? 遇到非字母字符就别动,咱这是“文明移位”,标点符号等原封不动保留,是不是也蛮靠谱的。

因为玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,顺便问一句,你是忠实的打游戏还是“搬砖党”呀?

话说回来,移位密码通俗点理解就像你在朋友圈“变脸”的贴纸,花点心思换个攻略,感觉自己像个小魔法师!

哦对,对这移位密码加密解密代码,大家要是想玩点花样,建议试试加上随机偏移量或者根据词长变换位移,绝对不输魔方,简单却令人着迷。

好啦,密码世界就先说到这儿,毕竟此刻你的代码可能就喊着想跑出去约会了。想知道怎么才能让移位密码跳个舞?嘿嘿,有机会咱们一起拆招!