C_h_r_is_ 2023-03-19 13:50 采纳率: 100%
浏览 51
已结题

c语言加密解密程序编写

求这个解密的大概思路是什么呀
密码是1101010 100000 1001110 1010010 1100001 1001101 100000 1010100 1010111 1011000

img

  • 写回答

2条回答 默认 最新

  • 滴水不穿石 2023-03-19 20:18
    关注

    第一个条件理解的不是很清楚,是不是只转换英文字母啊,小写a除外,后移是往小的方向移动,,
    下面是我写的,可能是理解有出入,仅供参考,适当修改也许能帮到你。

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    
    void btoc(char *b)
    {
        static char *set=" ";
        const int dig[8]= {1,2,4,8,16,32,64,128};
        char *p1,*p2,*p;
        int sum,i,j=0;
    
        char *res=(char *)malloc(strlen(b)+1);
        memset(res,'\0',strlen(b)+1);
        p2=res;
    
        p=strtok(b,set);
        while(p)
        {
            p1=p+strlen(p)-1;
            i=0,sum=0;
            while(p1>=p)
            {
                if(*p1=='1')
                    sum+=dig[i];
                if(isupper(sum))
                    sum=tolower(sum);
                else if(islower(sum))
                    sum=toupper(sum);
                i++,p1--;
            }
    
            sprintf(p2++,"%c",sum);
    
            p=strtok(NULL,set);
        }
        strncpy(b,res,strlen(b)+1);
        free(res);
    }
    
    //斐波那契数列
    int Fib(int n)
    {
        if (n <= 2)
        {
            return 1;
        }
        else
        {
            return Fib(n - 1) + Fib(n - 2);
        }
    }
    
    
    int main()
    {
        //""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        int pi[26];
        pi[0]=0;
        int len;
        
        char s[1024]="1101010  100000 1001110  1010010  1100001 1001101 100000  1010100 1010111 1011000";
        btoc(s);
    
    
        for(int i=2,j=1; i<27; i++,j++)
        {
            pi[j]=Fib(i)%26;
        }
    
        //是大写小写字母向前移,a和其它字符不变
        len=strlen(s);
        char *p1=s,*p2=s+len-1;
        while(p1<=p2)
        {
            if( isalpha(*p1) && *p1!='a')
            {
                if(islower(*p1))
                {
                    *p1+=pi[*p1-'a'];
                    if(*p1>'z')
                        *p1=*p1-'z'+'a'-1;
                }
                else if(isupper(*p1))
                {
                    *p1+=pi[*p1-'A'];
                    if(*p1>'Z')
                        *p1=*p1-'Z'+'A'-1;
                }
            }
            p1++;
    
        }
        puts(s);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 修改了问题 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。