使用異或運算對資料及檔案進行加密處理,附軟體及源碼

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   ar   使用   for   strong   

前幾天寫了一篇文章是在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

使用異或運算對資料及檔案進行加密處理,附軟體及源碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.