重溫經典之簡單的加密

開頭語

      “兩個光棍放在一起就是一雙筷子”,很經典的一句話!此時此刻,不管各位棍友都是什麼樣的心情,還是祝各位棍友節日快樂!


閒言少敘,書接正文。本文所探討的加密應該屬於最簡單加密方法之一吧!具體加密過程如描述:比如要加密一個文本文件,我會將一次讀出文本中的每個字符,然後通過已經規定的密匙(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;
}

測試文本:



驗證:

你可以先對源文本加密,得到加密後的內容,然後再次對源文本加密(也可以說是解密的過程),得到的就是測試文本中的內容了。

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