1. 用c语言设计一个简单地加密算,解密算法,并说明其中的原理
恰巧这两天刚看的一种思路,很简单的加密解密算法,我说一下吧。
算法原理很简单,假设你的原密码是A,用A与数B按位异或后得到C,C就是加密后的密码,用C再与数B按位异或后能得回A。即(A异或B)异或B=A。用C实现很简单的。
这就相当于,你用原密码A和特定数字B产生加密密码C,别人拿到这个加密的密码C,如果不知道特定的数字B,他是无法解密得到原密码A的。
对于密码是数字的情况可以用下面的代码:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;
scanf("%ld", &a);
printf("原密码:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密码:%ld\n", a);
a ^= b; printf("解密密码:%ld\n", a);
return 0;
}
如果密码是字符串的话,最简单的加密算法就是对每个字符重新映射,只要加密解密双方共同遵守同一个映射规则就行啦。
2. C语言编程:编写一个函数实现篱笆加密
intfence_cipher(unsignedchar*data,intdata_length,intn)
{
unsignedchar*ret;
inti,j,k=0;
if(data_length<=0||strlen((constchar*)data)==0){
return2;
}
if(n<=1||n>=data_length){
return1;
}
ret=(unsignedchar*)calloc(1,data_length+1);
if(ret==NULL){
return3;
}
for(i=0;i<n;i++)
{
for(j=0;j*(n+1)<data_length;j++)
{
if(j*(n+1)-i>=0){
ret[k++]=data[j*(n+1)-i];
}
if(i!=0&&i!=n-1&&j*(n+1)+i<data_length){
ret[k++]=data[j*(n+1)+i];
}
}
}
ret[k]='