异或加密
在网上看到有人用手机的九宫格输入法的键位加密汉字。
比如说「你好」两个字,因为「N」在「6」,「I」在「4」……
然后就「加密」成了「64426」。
但是突然想到这种方法太弱了,又想到前阵子看到的异或加密法,就写了个程序试一试。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int random(void);
int main(void)
{
int number;
char c;
if(argc == 1)
{
number = random();
fprintf(stderr,"生成随机数:%i\n",number);
}
else
{
number = atoi(argv[1]);
}
while((c=getchar())!=EOF)
{
c = c ^ number;
putchar(c);
}
printf("\n");
return 0;
}
int random(void)
{
int dev = open("/dev/random", O_RDONLY);
/* 因为使用了 /dev/random,所以不能直接在 Windows 下编译 */
int number;
read(dev,&number,sizeof number);
close(dev);
return number;
}
使用方法:
./progname < needfile > resultfile 2> randomfile
就是这样。
解密:
./progname randomnumber < resultfile > needfile
OK.
PS:维基百科:异或密码
Comments