21xrx.com
2024-12-22 20:40:59 Sunday
登录
文章检索 我的文章 写文章
C++ 实现凯撒密码
2023-07-07 14:04:55 深夜i     --     --
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等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复