21xrx.com
2025-03-25 00:50:17 Tuesday
文章检索 我的文章 写文章
C++ 实现凯撒密码
2023-07-07 14:04:55 深夜i     12     0
C++ 密码学 凯撒密码 字符串操作 加密算法

凯撒密码是一种最简单也是最古老的密码算法之一,它是一种替换密码,也就是说将明文中的每一个字母替换成特定的另一个字母。C++是一种流行的编程语言,可以用它来实现凯撒密码。

实现凯撒密码的思路很简单,就是将明文中的每一个字母都向后移动一个固定的偏移量。这个偏移量就是我们所谓的密钥。例如,如果密钥是3,那么明文中的每一个字母都要向后移动三个位置。但需要注意的是,如果向后移动后超过了字母表的末尾,那么就需要从字母表的开头重新开始。

接下来,我们看看如何用C++实现凯撒密码。首先,我们需要定义一个函数,它接受两个参数:一个是要加密或解密的字符串,另一个是密钥。这个函数的返回值是一个字符串,表示加密或解密后的结果。

std::string CaesarCipher(const std::string& str, int key) {
  std::string result = "";
  int n = str.size();
  for (int i = 0; i < n; i++) {
    char c = str[i];
    if (isalpha(c)) { // 只加密字母
      c = toupper(c); // 统一转为大写字母
      c = (c - 'A' + key) % 26 + 'A'; // 加密或解密
    }
    result += c; // 拼接结果串
  }
  return result;
}

上述代码中,我们首先创建了一个空字符串result,用来保存加密或解密后的结果。然后,我们遍历要加密或解密的字符串中的每一个字符,如果它是字母,那么我们就将它转为大写字母,并将它向后移动密钥个位置。注意,计算新的字符时需要先将它与'A'相减,得到字符在字母表中的位置,然后再加上密钥,最后再对26取模,得到新索引,再加上'A',得到新的字符。最后,我们将结果拼接到result中,并返回它。

我们可以通过调用上述函数来加密或解密一段文本。例如,下面是一个示例程序,它将一个字符串加密后再解密,然后输出结果:

#include <iostream>
std::string CaesarCipher(const std::string& str, int key);
int main() {
  std::string plaintext = "Hello, world!";
  int key = 3;
  std::string ciphertext = CaesarCipher(plaintext, key);
  std::cout << ciphertext << '\n';
  std::string decryptedtext = CaesarCipher(ciphertext, 26 - key);
  std::cout << decryptedtext << '\n';
  return 0;
}

输出结果为:

KHOOR, ZRUOG!
HELLO, WORLD!

上述示例程序中,我们将字符串"Hello, world!"加密后得到了"KHOOR, ZRUOG!",然后再用密钥的补数解密,得到了原来的明文。这说明我们的凯撒密码算法是可逆的。

当然,凯撒密码并不是一种安全的加密算法,因为它非常容易被破解。只要有足够的时间和计算能力,就可以通过暴力破解的方法找到密钥。因此,在实际应用中,我们需要使用更加复杂、安全的加密算法,如AES、RSA等。

  
  

评论区

请求出错了