仅使用数组在c++中创建加密程序.不知道该如何继续

Creating an encryption program in C++ by only using arrays. Not sure how to continue

本文关键字:不知道 何继续 继续 程序 加密 数组 c++ 创建      更新时间:2023-10-16

编辑注*我不是试图创建一些东西使用。我创建它是为了牢固地掌握数组在c++中的工作方式。

你好,我正在创建一个简单的加密程序。这是我的第一个程序(为了好玩),我对如何继续这个有点困惑。(我有一些代码,但是我卡住了!)

所以,首先,我将使用ROT-N加密方法。

基本上我希望用户输入一个消息,并让消息遵守这些规则:

1)移动用户输入的每个字符/数字,并向右移动8-15个字符/数字,并使其循环。我不想进入扩展字符列表。

2)如果用户输入一个小写字母,我想让它变成小写。

3)最后一位-我希望空格也被加密。程序应该指出空格在哪里。

交货。如果用户输入"Message 0600"

加密后的消息应该是"8umaaiom3933&8"

开头的"8"表示字母偏移了多少。"umaaiom3933"是加密后的消息。的,表示消息结束,最后一个"8"表示空格的位置。

我遇到的问题:

1)尝试从用户那里获取消息并将其放入数组中(消息中的每个字符成为数组中的一个字符)

2)取这些字符并为不同的值添加偏移值

这是我目前所掌握的。

#include <iostream> 
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    srand(time(0));
    int n = 13;
    cout << n << endl;
    int r = n + 255;
    string mes, emes;
    cout << "Please enter the message: " << endl;
    getline(cin,mes);
    int len = mes.length();
    for(int i = 0; i <= len; i++)
    {
        mes[i] += n;
    }
    cout << mes;


    return 0;
}

基本上,C字符串是一个格式为

的普通内存区域

' H ' ' e ' ' l ' ' l ' ' o’"——"' w ' ' o ' ' r ' ' l ' ' d ' 0

假设我们有一个char encrypt(char ch)函数,用来加密一个char。

int i;
char *str; /* the input string */
for(i=0;str[i] != 0; i++)
  str[i] = encrypt(str[i]);

但是c++标准模板库字符串有点不同。他们有更多的机械设备。虽然您可以尝试在适当的地方修改它们,但实际上您最好养成将它们视为不可变和恒定的习惯。但是你可以用push_back来创建一个。

std::string encryptstring(const std::string &plaintext)
{
   size_t i;  // should be int or index_t, very poor choice of name by the C++ folks
   std::string answer;
    for(i=0;i<plaintext.length();i++)
    {
        answer.push_back( encrypt(plaintext[i]));
    }
    return answer;
}

这是惯用的做法。c++确实允许直接访问字符串内容,但它往往不鼓励这样做。

我看了你们所有的评论。他们很有帮助,谢谢!我确实花了时间去思考和研究。我完成了这个项目。在这里!

我遇到的最大问题是我不明白在c++中字符串直接写入字符数组
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <sstream>
using namespace std;
int main()
{
    srand(time(0));
    string imes, omes;
    int len;
    int n = rand()%(15 - 8 + 1) + 8;
    cout << "Please Enter a Message:  " << endl;
    getline (cin, imes);    
    std::ostringstream oss;
    len = imes.length();
    for (int i = 0; i < len; i++)
    {
        imes[i] = tolower(imes[i]);
        if (imes[i] >= 'a' && imes[i] <= 'z')
        {
            omes += ((imes[i] - 'a' + n) % 26) + 'a';
        }
        if (imes[i] >= '0' && imes[i] <= '9')
        {
            omes += ((imes[i] - '0' + n) % 10) + '0';
        }   
        else 
        if(imes[i] == ' ')
        { 
            if (imes[i - 1] >= 'a' && imes[i - 1] <= 'z')
            {
                omes += ((imes[i - 1] - 'a' + 4) % 26) + 'a';
            }
            else
            if (imes[i - 1] >= '0' && imes[i - 1] <= '9')
            {
                omes += ((imes[i - 1] - '0' + 4) % 10) + '0';
            }
            oss << '#' << i;
        }
    }
    omes << '&' << oss.str() << endl;
    cout << "The message has been encrypted and transmitted" << endl;
    outdata.close();
    return 0;
}
相关文章: