XXTEA 加密演算法

2022-04-04 13:27:19 字數 2239 閱讀 1745

/*

* 需要注意的是,這裡加密的是位元組陣列,而不是字串。因為 c# 字串是按照 unicode 編碼儲存的。

* 要加密字串的話,需要用 system.text.encoding.utf8 (或者其他編碼器)的 getbytes 方法轉化為位元組陣列,然後才能對其加密,金鑰也是一樣的。

* 金鑰長度是 128 位,也就是 16 個元素的位元組陣列,不過少於 16 個位元組或多於 16 個位元組都可以正常工作,

* 少於 16 個位元組時,會自動通過補零來充填到 16 個位元組,多於 16 個位元組之後的元素會被忽略。

* 另外還需要注意一點,加密以後的內容也是位元組陣列,但是你不能用 system.text.encoding.utf8 把它轉化為字串,否則會造成資訊丟失。

* system.text.encoding encoder = system.text.encoding.utf8;

* byte data = xxtea.encrypt(encoder.getbytes(textbox1.text), encoder.getbytes("1234567890abcdef"));

* textbox2.text = system.convert.tobase64string(data);

* */

using system;

class xxtea

return tobytearray(encrypt(touint32array(data, true), touint32array(key, false)), false);

}public static byte decrypt(byte data, byte key)

return tobytearray(decrypt(touint32array(data, false), touint32array(key, false)), true);

}public static uint32 encrypt(uint32 v, uint32 k)

if (k.length < 4)

uint32 z = v[n], y = v[0], delta = 0x9e3779b9, sum = 0, e;

int32 p, q = 6 + 52 / (n + 1);

while (q-- > 0)

y = v[0];

z = unchecked(v[n] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));

}return v;

}public static uint32 decrypt(uint32 v, uint32 k)

if (k.length < 4)

uint32 z = v[n], y = v[0], delta = 0x9e3779b9, sum, e;

int32 p, q = 6 + 52 / (n + 1);

sum = unchecked((uint32)(q * delta));

while (sum != 0)

z = v[n];

y = unchecked(v[0] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));

sum = unchecked(sum - delta);

}return v;

}private static uint32 touint32array(byte data, boolean includelength)

else

n = data.length;

for (int32 i = 0; i < n; i++)

return result;

}private static byte tobytearray(uint32 data, boolean includelength)

else

byte result = new byte[n];

for (int32 i = 0; i < n; i++)

return result;}}

呼叫:public partial class form1 : form

private void button1_click(object sender, eventargs e)

private void button2_click(object sender, eventargs e)

catch (exception)}}

跨平台的加密演算法XXTEA的封裝

原文 xxtea演算法的結構非常簡單,只需要執行加法 異或和寄存的硬體即可,且軟體實現的 非常短小,具有可移植性。xxtea可對連續記憶體資料進行方便快速的加密解密,且比較安全,但其使用不是很方便,因此有了此次封裝。封裝好的介面如下 created by on 12 7 24.此類是對xxtea官方...

xxtea 微控制器資料加密演算法

各位大俠在做資料傳輸時,有沒有考慮過把資料加密起來進行傳輸,若在串列埠或者無線中把所要傳的資料加密起來,豈不是增加了通訊的安全性。常用的加密解密演算法比如des rsa等,受限於微控制器的記憶體和運算速度,實現起來比較困難,但一種叫tea的加密演算法特別適合微控制器使用。tea tiny encry...

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...