/*
***********************一次一密乱码本*********************
基础: c=a^b a=b^c
http://blog.csdn.net/unikingest/archive/2009/04/30/4138229.aspx
特点:1,密匙长度与信息长度等长。
2,密匙随机生成
3,密匙只能使用一次
4,只适用于少量数据
5,至今无人能解(^_^)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//构造一个随机密匙
void build_key(char *key,char *ch)
{
int i ,k;
char *p;
i=strlen(ch);
key[i]='/0';
i=0;
while( key[i] != '/0')
{
//随机填充ch长的密匙
key[i]=rand()%256;
i++;
}
}
void encrypt(char *key , char *ch)
{
int i=0;
while(ch[i] != '/0')
{
ch[i]=ch[i]^key[i];//每一位进行异或运算
i++;
}
}
//解密和加密的代码是完全相同的
void discrypt(char *key , char *ch)
{
int i=0;
while(ch[i] != '/0')
{
ch[i]=ch[i]^key[i];
i++;
}
}
main()
{
char ch[100];//存放信息
char key[100];//存放密匙
printf("Please input a message/n");
gets(ch);
//获取一个随机密匙
build_key(key,ch);
//加密
encrypt(key,ch);
printf("加密后的信息:%s/n/n/n",ch);
//解密
discrypt(key,ch);
printf("解密后的信息:%s/n",ch);
}