椰Ye 2022-12-10 00:54 采纳率: 63.2%
浏览 48
已结题

C++字符串指针的加密

C++字符串指针的加密
运行结果为什么是乱码,还有超出范围的模运算,我不太肯定是不是这样子简单地ascii码加减90
/*编制程序,将输入的一行字符(明文)加密和解密。加密时,明文的每个字符依次反复加上“4962873”中的数字,
如果范围超过ASCII码的032(空格)--122(’z’),则进行模运算。解密与加密的顺序相反。
编制加密和解密函数,打印各个过程的结果。
例如,加密:the result of 3 and 2 is not 8
(t)116+4,(h)104+9,(e)101+6,()32+2,(r)114+8,(e)1Ol+7,(s)115+3,
(u)117+4,(l)108+9,(t)116+6,( )32+2,(o)111+8,(f)102+7,( )32+3,(3)51+4,
()32+9,(a)97+6,(n)110+2,(d)100+8,( )32+7,(2)50+3,( )32+4,(i)105+9,(s)115+6,()32+2,(n)110+8,(o)111+7,(t)L16+3,( )32+4,(8)56+9
得到密文为:
xqk”zlvyuz”wm#7>gpl’s$ry”vvw$A
*/
#include<iostream>
#include<string>
using namespace std;
int main() {
    //函数声明
    int jia(char* str, int len, char* key);
    char str[100];
    char key[7] = { 4,9,6,2,8,7,3 };//密钥
    char ch = 0;
    int i = 0;
    cout << "请输入一行字符来进行加密" << endl;
    while ((ch=getchar()) != '\n') {
        str[i] = ch;
        i++;
    }
    int len = i;
    jia(&str[i],len,&key[7]);
    return 0;
}
int jia(char* str, int len,char* key) {
    char *m = &str[0];//m为明文
    char *n = &key[0];//n为密钥
    char *res = new char[len];
    for (int j = 0; j < len; j++) {
        if (*(m + j) < ' ') {
            *(res + j) = *(m + j) + 90 + *(n + j % 7);
        }
        if (*(m + j) > 'z') {
            *(res + j) = *(m + j) - 90 + *(n + j % 7);
        }
        
        *(res + j) = *(m + j) + *(n + j % 7);
    }
    for (int j = 0; j < len; j++) {
        cout << *(res + j);
    }

    return 0;
}

反反复复看,是指针的哪里出问题了啊
  • 写回答

1条回答 默认 最新

  • 浪客 2022-12-10 09:51
    关注
    
    void jia(char *str, char *key, int len)
    {
        int i = 0;
        char ch;
        while (*str)
        {
            if (i == len)
                i = 0;
            ch = *str;
            ch += key[i];
            if (ch < ' ' || ch > 'z')
                ch %= 'z';
            *str = ch;
            str++;
            i++;
        }
    }
    void jie(char *str, char *key, int len)
    {
        int i = 0;
        char ch;
        while (*str)
        {
            if (i == len)
                i = 0;
            ch = *str;
            ch -= key[i];
            if (ch < ' ' || ch > 'z')
                ch %= 'z';
            *str = ch;
            str++;
            i++;
        }
    }
    
    int main()
    {
        // 函数声明
        // int jia(char *str, int len, char *key);
        char str[100];
        char key[7] = {4, 9, 6, 2, 8, 7, 3}; // 密钥
        // char ch = 0;
        // int i = 0;
        cout << "请输入一行字符来进行加密" << endl;
        cin.getline(str, 100);
        // while ((ch = getchar()) != '\n')
        // {
        //     str[i] = ch;
        //     i++;
        // }
        // int len = i;
        // jia(&str[i], len, &key[7]);
        jia(str, key, 7);
        cout << str << endl;
        jie(str, key, 7);
        cout << str;
    
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么