使用tea演算法對資料進行加密

2021-12-30 00:50:51 字數 1297 閱讀 9561

對qq協議進行分析過的同學可能知道,qq的資料傳輸是使用tea演算法進行的加密。 

tea演算法是一種對稱加密演算法,特點是速度快,**量小(加密、解密的核心演算法總共才20來行)。演算法的安全性雖然不比aes,但其演算法的破譯難度取決於其迭代的次數。網上說qq是16次迭代,推薦的迭代次數是64次。我就對這些簡潔小巧的事物沒有抗拒力,於是在網上搜尋一下其**,研究一下。 

找到了乙個別人封裝好的類,很好用,我一會打包起來給大家。 

我對**進行了處理,寫了乙個簡單的加密字串的軟體。 

首先引用了網上的乙個類,很簡潔的90行**,其中加密的方法是:   

1 tea tea(key, times, false); 

2 tea.encrypt(plain, crypt); 

解密的方法是:   

1 tea tea(key, times, false); 

2 tea.decrypt(crypt, plain);   

建構函式中傳入金鑰key,times是迭代次數,我用的64次,第三個引數是「是否專為網路序」,如果加密完成後的密文不在網路上傳輸的話,就填false。 

encrypt方法對密文進行加密,plain是明文,crypt是輸出密文的緩衝區。而decrypt方法正好相反。 

下面是幾點要注意的: 

第一,plain、key、crypt三個引數型別都是byte *,也就unsigned char *,裡面儲存的是二進位製碼,是不能直接輸出在螢幕上的,所以你如果要加密字串,輸出hex,就得加一些**處理一下。如果大家加密乙個檔案的話,就不用處理了。 

第二,key長度16bit,所以我用了乙個md5處理之。將我們輸入的任意長度的字串先hash成md5,再作為乙個16bit的key傳入tea的建構函式。 

第三,加密時,明文長度必須是8bit,於是我把明文分成許多8bit的段,將每段密文加密。如果密文密文長度不是8的倍數,則我會在最後一段明文後面補隨機二進位制位,湊成8bit。所以一段明文加密出來的結果可能不相同,但不相同的一定是最後8bit,前面都應該是一樣的。而最後8bit中有效長度,我就放在密文的第一位。所以密文一定是奇數長度。   

我在網上看qq的tea加密是這樣兩個技巧:和我類似補隨機二進位制位補齊8的倍數,但採用了交織演算法:訊息被分為多個加密單元,每乙個加密單元都是8位元組,使用tea進行加密,加密結果與下乙個加密單元做異或運算後再作為待加密的明文。 

這樣感覺會更加複雜和安全一點,但我嫌麻煩就沒這麼處理了。如果對安全性要求更高的同學可以自己下去稍微一改。 

sqlserver對資料進行加密 解密

建立測試表 create table tbluser name nvarchar 30 password varbinary 1000 建立資料庫主金鑰 create master key encryption by password passw ord 建立證書 create certificat...

使用bcrypt對資料加密

這是一篇隨筆,用於記錄在專案中用到乙個比較的你npm包。這個包之所以這個貨因為他的安全係數比以前用到的類似於md5,sha1要高,因為bcrypt加密,同樣乙個值,你每次加密出來的值是不一樣的。原來的md5加密就做不到這一點。好了廢話不多說,如果對bcrypt的演算法感興趣的話,大佬們可以去研究一下...

使用SQL語句對資料進行MD5加密

如果資料庫表user中有一列為passwd,存放的是md5加密的資料,如何更新新的資料。update user set passwd md5 123321 where uname lihua 插入新的資料 insert into user uname,passwd values xiaoqiang ...