设计一个加密机。要求是针对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;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!