程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用異或運算對數據及文件進行加密處理,附軟件及源碼,

使用異或運算對數據及文件進行加密處理,附軟件及源碼,

編輯:關於C語言

使用異或運算對數據及文件進行加密處理,附軟件及源碼,


前幾天寫了一篇文章是在C語言中使用異或運算交換兩個任意類型變量,其基礎為使用^交換兩個整數的算法:

a ^= b;
b ^= a;
a ^= b;

如果你看明白這個算法,就會發現這樣的規律:一個數異或另一個數兩次後,該數保持不變。即:

  c = a^b;

  c = c^b;

  c == a;

這一規律就是使用異或運算對數據及文件進行加密處理的基本原理。

那就先貼下加密算法的代碼:

bool XorEncrypt(void* bufPtr, unsigned int bufSize, const char* key, unsigned int keySize)
{
    if (!bufPtr || !key || keySize == 0)
    {
        return false;
    }
    char* ptr = (char*)bufPtr;

    unsigned int index;
    for (unsigned int i = 0; i < bufSize; i++)
    {
        index = i%keySize;
        ptr[i] ^= key[index];
    }

    return true;
}

代碼中

bufPtr為需要加密的數據指針
bufSize為需要加密的數據長度

key為密鑰數據指針

keySize為密鑰數據長度

再附上測試代碼:

void main()
{
    const char* szKey = "Garbageman is grabage";
    unsigned int keySize = strlen(szKey);

    int test_int[10] = 
    {0, 0xff356992, 323, 23582, 0x90abcd,
     332335, 69895, 456812, 548, 7646};

    float test_float[10] = 
    {0.0f, 1.000001f, 953214.12f, 3658.01f, 5245.045f, 
     1.000001f, 953214.12f, 3658.0f, 9545.0f, 65323.0f};

    double test_double[10] = 
    {0.0, 1.000001, 953214.12, 3658.01, 5245.045, 
    1.000001, 953214.12, 3658.0, 9545.0, 65323.0};

    // 加密
    XorEncrypt(test_int, sizeof(test_int), szKey, keySize);
    XorEncrypt(test_float, sizeof(test_float), szKey, keySize);
    XorEncrypt(test_double, sizeof(test_double), szKey, keySize);

    // 解密
    XorEncrypt(test_int, sizeof(test_int), szKey, keySize);
    XorEncrypt(test_float, sizeof(test_float), szKey, keySize);
    XorEncrypt(test_double, sizeof(test_double), szKey, keySize);

    int m = 0;
}

當數據被兩次執行XorEncrypt函數後,其數值是不會發生變化的。看一下調試時的截圖:

(1)未執行XorEncrypt的數值,即未加密的數據:

(2)第一次執行XorEncrypt後的數值,即加密後的數據:

(3)第二次執行XorEncrypt後的數值,即解密後的數據:

這如同變魔術一樣,數據變亂了,又能恢復回來。

該算法同樣可以對文件數據進行處理,下圖為我寫的這個小軟件截圖:一幅是文件加密前的,一幅是加密處理後的

軟件寫得很簡單,能支持處理的最大文件取決於你的電腦一次最多申請的內存。順便說一下,異或是一種很弱的加密方法,很容易被破解。

 

軟件及其源碼下載:http://files.cnblogs.com/WhyEngine/FileEncrypt.zip




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved