開頭語
“兩個光棍放在一起就是一雙筷子”,很經典的一句話!此時此刻,不管各位棍友都是什麼樣的心情,還是祝各位棍友節日快樂!
閒言少敘,書接正文。本文所探討的加密應該屬於最簡單加密方法之一吧!具體加密過程如描述:比如要加密一個文本文件,我會將一次讀出文本中的每個字符,然後通過已經規定的密匙(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;
}
測試文本:
驗證:
你可以先對源文本加密,得到加密後的內容,然後再次對源文本加密(也可以說是解密的過程),得到的就是測試文本中的內容了。