赞
踩
凯撒密码是历史上最简单的加密方式之一,它基于一种替换方法,即将明文中的每个字母都替换成它之后的第 N 个字母。下面是一个简单的 C 语言实现:
- #include <stdio.h>
- #include <string.h>
-
- // 加密函数,plaintext 为明文,key 为加密密钥
- void encrypt(char plaintext[], int key) {
- int len = strlen(plaintext);
- for (int i = 0; i < len; i++) {
- if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {
- // 处理小写字母
- plaintext[i] = (plaintext[i] - 'a' + key) % 26 + 'a';
- } else if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
- // 处理大写字母
- plaintext[i] = (plaintext[i] - 'A' + key) % 26 + 'A';
- }
- }
- }
-
- // 解密函数,ciphertext 为密文,key 为加密密钥
- void decrypt(char ciphertext[], int key) {
- int len = strlen(ciphertext);
- for (int i = 0; i < len; i++) {
- if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z') {
- // 处理小写字母
- ciphertext[i] = (ciphertext[i] - 'a' - key + 26) % 26 + 'a';
- } else if (ciphertext[i] >= 'A' && ciphertext[i] <= 'Z') {
- // 处理大写字母
- ciphertext[i] = (ciphertext[i] - 'A' - key + 26) % 26 + 'A';;
- }
- }
- }
-
- int main() {
- char plaintext[100], ciphertext[100];
- int key;
-
- // 读取明文和密钥
- printf("Enter plaintext: ");
- gets(plaintext);
- printf("Enter key: ");
- scanf("%d", &key);
-
- // 加密
- strcpy(ciphertext, plaintext);
- encrypt(ciphertext, key);
- printf("Ciphertext: %s\n", ciphertext);
-
- // 解密
- decrypt(ciphertext, key);
- printf("Decrypted plaintext: %s\n", ciphertext);
-
- return 0;
- }

在这个例子中,我们将用户输入的明文和密钥传递给 encrypt
函数,该函数将加密结果存储在了 ciphertext
数组中,我们再将其打印出来。然后,我们调用 decrypt
函数并将 ciphertext
和密钥作为参数传递给它,这个函数将在原地解密密文并将结果存储在 ciphertext
中,最后我们将其打印出来以得到解密后的明文。
需要注意的是,在处理小写和大写字母时要分别加上 ‘a’ 或 ‘A’,并且需要对数字进行模运算以确保使用正常的字母序,使用了 gets
函数读取用户输入,需要小心输入超过字符数组容量时可能导致的缓冲区溢出问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。