重温经典之简单的加密

开头语

      “两个光棍放在一起就是一双筷子”,很经典的一句话!此时此刻,不管各位棍友都是什么样的心情,还是祝各位棍友节日快乐!


闲言少叙,书接正文。本文所探讨的加密应该属于最简单加密方法之一吧!具体加密过程如描述:比如要加密一个文本文件,我会将一次读出文本中的每个字符,然后通过已经规定的密匙(key)加密,然后将其写进另一个文本文件中,一直如此,直至源文本中的内容全部被加密,并且将加密后的密文都写入目标文本中。这样对一个文本的加密就结束了,呵呵,容易吧!总体思想就是这么简单,不过还得做些补充。

现在需要补充说明的就是密匙(key)的选择。举个例子吧,字符a的二进制码是8位,那么key应该怎么选择呢?在本文中,key的位数选择是随意的。如果你选择的key小于8位,那么补齐就行;如果正好是8位,这正是我们最想看到的,不需做任何处理;如果大于8位,比如是13位,那么将这13位组成一个环。这样就可以先取前1-8位,然后取9-13位以及1-3位,这样一直循环下去即可。这就是对key的选择。

说了这么多,还是看一下代码吧!在本代码中key我选择的是13位。

#include <stdio.h>

#define SIZE 13

char encrypt(char ch, char key[],int len)
{
	static int i = 0;
	int j;
	char key1 = 0;

	for(j = 0; j < 8; j++)
	{
		key1 >>= 1;
		i = (i + j) % len;
		if(key[i+j] == 1)
		{
			key1 |= 0x80; 
		}
	}
	return ch ^ key1;
}

int main()
{
	char key[SIZE] = {0,1,1,0,0,1,0,0,0,1,1,1,0};
	int ch;
	FILE *pf = fopen("SuperFC","r+");
	while((ch = fgetc(pf)) != EOF)
	{
		ch = encrypt(ch,key,13);
		fseek(pf,-1,SEEK_CUR);
		fputc(ch,pf);
		fflush(pf);
	}
	fclose(pf);

	return 0;
}

测试文本:



验证:

你可以先对源文本加密,得到加密后的内容,然后再次对源文本加密(也可以说是解密的过程),得到的就是测试文本中的内容了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章