基于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个目标字符的加密结果。这样做的目的是:将来为了解密。

#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码范围的

下面是源码


#include <stdio.h>
 
char *jm(char str[],char key[]){
    int i,f,n,d,j;
    n = key[2];
    d = 0;
    for (j = 0; j < 8; j++){
        d = (d << 1) | (n & 1);
            n = n >> 1;
    }
    for (i = 0; str[i] !='\0'; i++) {
        f = str[i] ^ key[0];
        n = key[1]-'0';
        f = ((f >> (8-n)) | (f << n)) & 0xff;
        f = f ^ d;
        str[i] = f;
    }
    return str;
}
int main() {
    char key[] = "A2C";
    char str[] = "abcdef";
    jm(str,key);
    printf("%s", str);
    return 0;