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]='