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

2021-09-06 19:01:05 字數 2040 閱讀 9345

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

char* ptr = (char*)bufptr;

unsigned

intindex;

for (unsigned int i = 0; i < bufsize; i++)

return

true;}

**中

bufptr為需要加密的資料指標

bufsize為需要加密的資料長度

key為金鑰資料指標

keysize為金鑰資料長度

再附上測試**:

void

main()

;

float test_float[10] =;

double test_double[10] =;

//加密

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後的數值,即解密後的資料:

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

該演算法同樣可以對檔案資料進行處理,下圖為我寫的這個小軟體截圖:一幅是檔案加密前的,一幅是加密處理後的

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

前端 使用 crypto js 對資料進行對稱加密

from 傳送門 crypto js github demo1 載入核心加密庫 var cryptojs require crypto js 載入des演算法 var tripledes require crypto js tripledes 開始加密,並且返回密文 var ciphertext t...

使用RSA對資料進行加簽且驗籤

加簽驗籤是為了驗證接收到的資料的真實性問題,但此次我的應用場景是這樣的 因為要從乙個系統傳送http請求到另乙個系統的網域名稱上去獲取相應的資料,但是被請求的這個網域名稱是外網網域名稱 任何人都能通過請求這個網域名稱位址來獲取資料 所以簡單的使用簽名來做一下校驗,驗籤不通過的請求則不允許獲取資料。下...

用C語言對資料或檔案內容進行加密

資料加密解密的原理也很簡單,就是使用異或運算。請先看下面的 include include int main 執行結果 char ascii plaintext a 1100001 secretkey 100001 ciphertext 1000000 decodetext a 1100001pla...