FORCEDWW 2022-05-20 23:50 采纳率: 0%
浏览 103
已结题

基于C语言编程实现的加密问题

设计一个加密机。要求是针对100个字符组成的字符串进行加密。
方法是:事先设计一个由3个字符组成的字符串作为秘钥,用此秘钥对100 个字符组成的字符串进行运算加密。秘钥字符串由字母加数字构成,秘钥第1个字符为任意字符,第2个字符为1-7之间的数字,第3个字符为任意字符。
要求是:
第一次:用秘钥的第1个字符对目标字符进行异或运算,如目标是 "A",秘钥是”C”,第1次,A XOR C;
第二次:用秘钥的第2个字符的对目标字符ASC的16进制数据进行循环左移位,如数字为2,则左边的位移动2个到右边。如第一次加密结果是“W”,其16进制asc数据为:0x57,二进制为01010111。第二次加密时,左边循环2位移动到右边是:01011101,其16进制数为:0x5d,这就是第二次加密的结果(是假设第一次加密结果为的情况下)
第三次:用秘钥的第三个字符的反向ASC码对目标字符进行异或。如秘钥的第三个字符为C.则其ASC码的16进制为0x43,二进制为01000011,反向ASC码 (从右边到左边数)为,11000010,16进制为0xC2,这时用0xC2继续第三次对目标字符进行加密,最后得到100个目标字符的加密结果。这样做的目的是:将来为了解密。

  • 写回答

2条回答 默认 最新

  • 小白小白你好菜 2022-05-21 01:18
    关注
    获得5.00元问题酬金
    #include<stdio.h>
    
    int main(){
        char a[101], k[4];
        printf("请输入密钥:");
        scanf("%s", k);
        printf("请输入待加密字符串:\n");
        getchar();
        gets(a);
        
        int i, b, c = 0;
        for(i = 0; i < 8; i++){                    //第三个密钥 
            c = c*2 + (k[2] & 1);
            k[2] = k[2] >> 1;
        }
        for(i = 0; a[i] != '\0'; i++){
            a[i] = a[i] ^ k[0];                    //一轮加密 
            b = a[i];
            b = b >> (8- (k[1] - '0'));
            a[i] = (a[i] << (k[1] - '0')) + b;    //二轮加密 
            a[i] = a[i] ^ c;                      //三轮加密 
        }
        
        printf("加密结果:\n%s", a);
        return 0;
    } 
    

    我觉得你的题目有点问题,字符串中的数据的值加密后是可能超过ASCII码范围的

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月28日
  • 创建了问题 5月20日

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示