21xrx.com
2024-12-23 02:10:56 Monday
登录
文章检索 我的文章 写文章
C++编写凯撒密码程序
2023-07-02 04:31:24 深夜i     --     --
C++ 凯撒密码 编写程序

凯撒密码是一种简单的加密方法,它是通过将明文中的每个字母都移动固定的位置来加密的。这个固定值被称为“偏移量”或“密钥”。如果偏移量是3,那么明文中的每个字母都要向右移动3个位置。例如,字母A加密后变成了D,字母B加密后变成了E,以此类推。

C++是一种广泛使用的编程语言,非常适合用于编写加密程序。在本文中,我们将介绍如何使用C++编写凯撒密码程序来加密和解密文本。

首先,我们需要声明一个整数变量来存储偏移量。这个变量将被用于加密和解密过程中,以便将字母移动到正确的位置。我们可以使用以下代码声明这个变量:


int shift = 3; // 3是一个偏移量

接下来,我们需要声明一个字符串变量来存储明文和密文。这个变量将被用于存储我们要加密和解密的文本。我们可以使用以下代码声明这个变量:


string plaintext = "hello world"; // 明文

string ciphertext = ""; // 密文

明文是我们想要加密的原始文本,这里我们将其设置为“hello world”。密文是我们将要输出的加密后的文本,因此现在还没有内容。

接下来,我们需要遍历明文中的每个字符,并将它们移动到正确的位置上。我们可以使用以下代码来完成这个任务:


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

  if (isalpha(plaintext[i])) { // 只对字母进行加密

    if (isupper(plaintext[i])) { // 大写字母

      ciphertext += char(int(plaintext[i] + shift - 65) % 26 + 65);

    }

    else { // 小写字母

      ciphertext += char(int(plaintext[i] + shift - 97) % 26 + 97);

    }

  }

  else { // 非字母字符

    ciphertext += plaintext[i];

  }

}

在这段代码中,我们使用了一个for循环来遍历明文中的每个字符。使用isalpha()函数来检查该字符是否为字母。如果是字母,我们使用isupper()函数来检查它是否为大写字母。如果是大写字母,则将它转换为小写字母,并使用ASCII码的差值来计算它在移动后的位置。否则,我们就使用相同的方法将它移动到正确的位置上。最后,我们将移动后的字母添加到密文字符串中。

最后,我们需要使用以下代码输出加密后的文本:


cout << "密文: " << ciphertext << endl;

现在,我们已经完成了凯撒密码的加密过程,整个代码如下:


#include <iostream>

#include <string>

using namespace std;

int main() {

  int shift = 3; // 偏移量

  string plaintext = "hello world"; // 明文

  string ciphertext = ""; // 密文

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

    if (isalpha(plaintext[i])) {

      if (isupper(plaintext[i])) {

        ciphertext += char(int(plaintext[i] + shift - 65) % 26 + 65);

      }

      else {

        ciphertext += char(int(plaintext[i] + shift - 97) % 26 + 97);

      }

    }

    else {

      ciphertext += plaintext[i];

    }

  }

  cout << "密文: " << ciphertext << endl;

  return 0;

}

如果我们想要解密密文,我们只需要将偏移量变为负数即可。例如,如果偏移量为3,则-3就是解密时要使用的偏移量。

总的来说,C++是一种非常适合编写加密程序的语言,并且凯撒密码是一种简单而有效的加密方法。通过上面的代码,您可以开始编写自己的凯撒密码程序,以保护您的私人信息。

  
  

评论区

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