林.盈 2019-10-30 19:58 采纳率: 0%
浏览 1017
已采纳

求如何用队列实现密码加密解密

密码加密原理描述如下:

将明文(一个字符串)的每个字符按照字母表后移,每个字符的后移个数由秘
钥值列表确定,如果
明文比密钥值列表长,可以从头再使用这个密钥值列表。

如明文:student,秘钥:2345,

则加密方法是:s(向后移动2位)变成u,t(向后移动3位)变成w,u(向
后移动4位)变成y,d(向后移动5位) 变成i,此时秘钥用完,所
以从头开始用2进行移位加密,依此类推可以得到加密后的密文。而
解密时,只需将密文根据秘钥反推就可以得到明文。

  • 写回答

2条回答 默认 最新

  • alongname 2019-10-31 11:31
    关注
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    #define MAXSIZE 100
    
    using namespace std;
    
    typedef struct QueueModel
    {
        int SIZE;
        char* data;
        int front, rear;
    }Queue;
    
    void enqueue(Queue &que, char data)
    {
        if (que.rear + 1 == que.SIZE)
            return;
        que.data[que.rear++] = data;
    }
    
    void dequeue(Queue &que, char &data)
    {
        if (que.rear == que.front)
            que.front = 0;
        data = que.data[que.front++];
    }
    
    void encode(char* text, char* keys)
    {
        Queue que;
        que.front = que.rear = 0;
    
        int len = strlen(keys);
        que.data = new char[len];
        int i;
        for (i = 0; i < len; i++)
            enqueue(que, keys[i]);
    
        for (i = 0; i < strlen(text); i++)
        {
            char ch;
            dequeue(que, ch);
    
            text[i] = (char)(text[i] + (ch - '0'));
        }
    
        cout << "加密结果:" << text << endl;
    }
    
    void decode(char* cipher, char* keys)
    {
        Queue que;
        que.front = que.rear = 0;
    
        int len = strlen(keys);
        que.data = new char[len];
        int i;
        for (i = 0; i < len; i++)
            enqueue(que, keys[i]);
    
        for (i = 0; i < strlen(cipher); i++)
        {
            char ch;
            dequeue(que, ch);
    
            cipher[i] = (char)(cipher[i] - (ch - '0'));
        }
    
        cout << "解密结果:" << cipher << endl;
    }
    
    int main()
    {
        char text[MAXSIZE];
        cout << "输入明文:";
        scanf_s("%s", text, MAXSIZE);
        getchar();
    
        char keys[MAXSIZE];
        cout << "输入密钥:";
        scanf_s("%s", keys, MAXSIZE);
        getchar();
    
        encode(text, keys);
        decode(text, keys);
        getchar();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 3月29日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)