加密代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N sizeof(unsigned char)*8
typedef unsigned char uchar;
uchar rol(uchar x,int n)
{
uchar l=x<<n;
uchar r=x>>(N-n);
uchar res=l|r;
return res;
}
uchar ror(uchar x,int n)
{
uchar l=x>>n;
uchar r=x<<(N-n);
uchar res=l|r;
return res;
}
int main()
{
char key[10];
char psd[10];
int newkey[10];
int ecykey[10];
int i;
puts("请输入加密系统关键字序列key:");
gets(key);
puts("请输入用户原始密码:");
gets(psd);
newkey[0]=rol(key[0],3);
newkey[1]=key[1];
newkey[2]=ror(key[2],3);
ecykey[0]=psd[0]^newkey[0];
ecykey[3]=psd[3]^newkey[0];
ecykey[6]=psd[6]^newkey[0];
ecykey[1]=psd[1]^newkey[1];
ecykey[4]=psd[4]^newkey[1];
ecykey[7]=psd[7]^newkey[1];
ecykey[2]=psd[2]^newkey[2];
ecykey[5]=psd[5]^newkey[2];
puts("用户加密后的密码序列:");
for(i=0;i<=7;i++)
printf("%d ",ecykey[i]);
return 0;
}
解密代码:
#include<stdio.h>
#include<string.h>
#define N sizeof(unsigned char)*8
typedef unsigned char uchar;
uchar rol(uchar x,int n)
{
uchar l=x<<n;
uchar r=x>>(N-n);
uchar res=l|r;
return res;
}
uchar ror(uchar x,int n)
{
uchar l=x>>n;
uchar r=x<<(N-n);
uchar res=l|r;
return res;
}
int main()
{
char key[10];
char psd[10];
int newkey[10];
int ecykey[10];
int i;
puts("请输入加密系统关键字序列key:");
gets(key);
puts("请输入用户加密后的密码序列:");
for(i=0;i<8;i++)
scanf("%d",ecykey+i);
newkey[0]=rol(key[0],3);
newkey[1]=key[1];
newkey[2]=ror(key[2],3);
psd[0]=ecykey[0]^newkey[0];
psd[3]=ecykey[3]^newkey[0];
psd[6]=ecykey[6]^newkey[0];
psd[1]=ecykey[1]^newkey[1];
psd[4]=ecykey[4]^newkey[1];
psd[7]=ecykey[7]^newkey[1];
psd[2]=ecykey[2]^newkey[2];
psd[5]=ecykey[5]^newkey[2];
puts("用户原始密码为:");
for(i=0;i<8;i++)
printf("%c",psd[i]);
puts("");
return 0;
}