用C语言实现凯撒密码及其解密,搞懂这套路,连小学生都会玩!

2025-07-22 6:08:59 密码用途 思思

凯撒密码,听起来高大上,其实就是拼字游戏,只不过用代码来玩,帅气又炫酷。今天咱们就用C语言来搞定这家伙!如果你还不知道凯撒密码啥玩意儿,简单来说,就是字母轮子转一转,把原本的字母换成另一个字母,比如“A”向后滑动3格变成“D”,这个过程就是加密啦!解密呢?就是把字母再滑回来。好啦,废话不多说,直接开整,保证你看完能自己敲代码,轻轻松松当“码农小天才”。

先得明明白白凯撒密码的“玩法规则”:字母表里有26个字母,我们把每个字母用它对应的编号(A=0,B=1…Z=25)表示。加密时字母编号+k(key)再模26,解密就是字母编号-k,再模26。关键点是,大小写得分清楚,不然“a”变成Z啥的就尬了。此外,非字母字符保持不变,别把空格也当成什么神秘字母哈。

好了,来看代码主菜啦。先写个函数给你包裹好加密过程:

char encryptChar(char ch, int key) {

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

return (ch - 'a' + key) % 26 + 'a';

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

return (ch - 'A' + key) % 26 + 'A';

} else {

return ch; // 非字母不动

}

}

这段代码简直是“神来之笔”,明明白白把字符给加密了。小伙伴们,各位猿友快感受下“魔法”!把字符拿进函数,瞬间变身不一样的字母。

接下来,写个解密函数?别傻了,解密不就是加个负数嘛,直接复用来个透明的函数岂不是更骚:

char decryptChar(char ch, int key) {

return encryptChar(ch, 26 - key); // 解密就是反方向旋转

}

嗯,返老还童,原地满血复活,神不神奇?

再搞个批量版本,整个字符串加密和解密一次搞定,方便得很:

void encrypt(char *text, int key) {

int i = 0;

while (text[i] != '\0') {

text[i] = encryptChar(text[i], key);

i++;

}

}

void decrypt(char *text, int key) {

encrypt(text, 26 - key);

}

完美!注意咯,这里修改了传入字符串本体,别忘了你的字符串空间有足够长度,别写成了“只读小朋友”,不然编译器要给你来个“段错误”大礼包。

为了看个真家伙,你可以这样用:

int main() {

char input[] = "Hello, C Language!";

int key = 3;

printf("原文:%s\n", input);

encrypt(input, key);

printf("加密后:%s\n", input);

decrypt(input, key);

printf("解密后:%s\n", input);

return 0;

}

执行效果走起:

原文:Hello, C Language!

加密后:Khoor, F Odqjdjh!

解密后:Hello, C Language!

看明白没有?被“神奇轮子”转起来的字母,瞬间让密文变得晦涩难懂,酷不?学会这个,约稿“间谍小说”妥妥的。

说到这,给你一个冷知识,凯撒密码虽然算简单,但被破解起来比你想象要快得多,毕竟钥匙也就是0到25,暴力尝试好几次就能搞定。不过,作为入门解密手段,确实够用啦。你要是有心想变难,调个“大转盘”,用更多的字母表,或者整合其它加密算法,立马变成“黑客级别”了。

对了,偷偷插播一句,玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink,不聊别的先去试试,说不定哪天成为“游戏大神”赚钱养家不是梦哦~

如果你懒得写代码,也可以尝试网上的在线凯撒密码生成器,或者直接用Python写个一键脚本,比起C语言,稍微友好点,凸显你多面手的才华。不过,要真正呼风唤雨,C语言的底层实现最能彰显“硬核程序员”的威风,看懂了代码,你就有一把“穿透黑暗”的密码钥匙!

下面来点有趣的,思考一下:假设你的密钥是26,原文经过“凯撒轮盘”转一圈还不就是原文?这是不是意味着,有些密码其实是“原地打圈圈”?你能找到密钥是26之外还原原文的情况吗?动脑筋的时候到了。

所以说,写C语言实现凯撒密码,真是既锻炼脑力又增进编程功力的绝佳利器。代码写完后,复制一段你最喜欢的歌词试试,看看改头换面还能不能认出来。