加密机设计,对字符串进行加密

设计一个加密机。要求是针对180个字符组成的字符串进行加密。
方法是:事先设计一个由3个字符组成的字符串作为秘钥,用此秘钥对100个字符组成的字符串进行运算加密。
秘钥字符串由字母加数字构成,秘钥第1个字符为任意字符,
第2个字符为1—7之间的数字,
第3个字符为任意字符。
要求是:
第一次:用秘钥的第1个字符对目标字符进行异或运算,如目标是‘A”,秘钥“C",第1次,A XOR C;
第二次:用秘钥的第2个字符的对目标字符ASC的16进制数据进行循环左移位,
如数字为2,则左边的位移动2个到右边。
如第一次加密结果是'W',其16进制asc数据为:0X57,二进制为0101 0111。
第二次加密时,左边循环2位移动到右边是:01011 01,其16进制数为:0x5d,
这就是第二次加密的结果(是假设第一次加密结果为W的情况下)。

第三次:用秘钥的第三个字符的反向ASC码对目标字符进行异或。如秘钥的第三个字符为C,
,则其ASC码的16进制为0x43,二进制为0100011,
9反向ASC码(从右边到左边数)为,11000010,16进制为0xC2,
这时用0xC2继续第三次对目标字符进行加密.最后得到100个目标字符的加密结果,
要求:实现加密,加密次数越多越好

你题目的解答代码如下:

#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;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img