题目描述
注:本题只需要提交标记为填充部分之间的代码,请按照C++方式提交。
简单异或密码(simple XOR cipher)是密码学中一种简单的加密算法。其加密原理为,将要加密的字符变量ptext和密码字符变量code进行异或(^)运算得到密文字符变量 ctext ,即 ctext = ptext^code。对应的解密原理为,将获得的密文字符变量 ctext与密码字符变量code进行异或(^)运算得到原密文字符变量ptext 即 ptext = ctext^code。(其加密和解密过程相同)
例如:对于明文串"ABCDE"和密码串"C++", 进行逐字符加密,得到密文的ASCII序列: 2(字符A的ASCII^字符C的ASCII) ,105(字符B的ASCII^字符+的ASCII),104(字符C的ASCII^字符+的ASCII),7(字符D的ASCII^字符C的ASCII) ,110(字符E的ASCII^字符+的ASCII)。
其实现的C代码如下:
#include<string.h>
#include<stdio.h>
int main()
{
char plaintext[100]="ABCDE";
char code[100]="C++";
char ciphertext[100]="";
int len1,len2,i,j;
len1=strlen(plaintext);
len2=strlen(code);
for(i=j=0; i<len1; i++,j=(j+1)%len2)
{
ciphertext[i]=plaintext[i]^code[j]; //加密
printf("%d ",ciphertext[i]);//输出密文对应的ASCII
}
for(i=j=0; i<len1; i++,j=(j+1)%len2)
{
plaintext[i]=ciphertext[i]^code[j]; //解密
}
printf("\n");
puts(plaintext);
return 0;
}
//请重新设计密码类 XORcipher 实现与上述C代码等价的C++代码,自己包含需要的头文件
/*************************
在此处补充你的代码
class XORcipher {
void encode(……);
};
**************************/
//主函数给定如下:不需要提交
int main()
{
char plaintext[100]="";
char code[100]="";
char ciphertext[100]="";
cin>> plaintext >>code; //输入明文和加密串
int len1,len2;
len1=strlen(plaintext);
len2=strlen(code);
XORcipher va;
va.encode(plaintext,len1,code,len2,ciphertext); //加密
int i;
for(i=0; i<len1; i++)
cout<<(int)ciphertext[i]<<" "; //输出密文对应的ASCII
va.encode(ciphertext,len1,code,len2,plaintext); //解密
cout<<endl<<plaintext<<endl; //输出明文
return 0;
}
输入
明文串和密码串
输出
第一行 密文对应的ASCII
第二行 原来的明文串
样例输入
ABCDE
C++
样例输出
2 105 104 7 110
ABCDE
参考代码
#include<string.h>
#include<stdio.h>
int main()
{
char c[100],b[100];
scanf("%s%s",c,b);
int m=strlen(c);
int n=strlen(b);
int k=0;
for (int i=0;i<m;i++,k++)
{
if(k==n)k=0;
c[i]^=b[k];
}
for (int i=0;i<m;i++)
printf("%d ",c[i]);
printf("n");
for(int i=0,k=0;i<m;i++,k++)
{
if(k==n)k=0;
c[i]^=b[k];
}
for(int i=0;i<m;i++)
printf("%c",c[i]);
return 0;
}
解析
暂无