前幾天寫了一篇文章是在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當資料被兩次執行xorencrypt函式後,其數值是不會發生變化的。看一下除錯時的截圖: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;}
(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...