林.盈 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日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大