日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

TEA算法解析

發(fā)布時間:2023/12/13 综合教程 52 生活家
生活随笔 收集整理的這篇文章主要介紹了 TEA算法解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄算法之TEA一丶TEA簡介二丶加密解密代碼演示

算法之TEA

一丶TEA簡介

"TEA" 的全稱為"Tiny Encryption Algorithm" 是1994年由英國劍橋大學的David j.wheeler發(fā)明的.

TEA算法也算是微型加密算法

其加密流程如下

在安全學領(lǐng)域,TEA(Tiny Encryption Algorithm)是一種分組加密算法,它的實現(xiàn)非常簡單,通常只需要很精短的幾行代碼。TEA 算法最初是由劍橋計算機實驗室的 David Wheeler 和 Roger Needham 在 1994 年設計的。
TEA算法使用64位的明文分組和128位的密鑰,它使用Feistel分組加密框架,需要進行 64 輪迭代,盡管作者認為 32 輪已經(jīng)足夠了。該算法使用了一個神秘常數(shù)δ作為倍數(shù),它來源于黃金比率以保證每一輪加密都不相同。但δ的精確值似乎并不重要,這里 TEA 把它定義為 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9)。
之后 TEA 算法被發(fā)現(xiàn)存在缺陷,作為回應,設計者提出了一個 TEA 的升級版本——XTEA(有時也被稱為“tean”)。XTEA 跟 TEA 使用了相同的簡單運算,但它采用了截然不同的順序,為了阻止密鑰表攻擊,四個子密鑰(在加密過程中,原 128 位的密鑰被拆分為 4 個 32 位的子密鑰)采用了一種不太正規(guī)的方式進行混合,但速度更慢了

二丶加密解密代碼演示

加密函數(shù):

void Encrypt(long* EntryData, long* Key)
{
    //分別加密數(shù)組中的前四個字節(jié)與后4個字節(jié),4個字節(jié)為一組每次加密兩組
    unsigned long x = EntryData[0];
    unsigned long y = EntryData[1];

    unsigned long sum = 0;
    unsigned long delta = 0x9E3779B9;
    //總共加密32輪
    for (int i = 0; i < 32; i++)
    {
        sum += delta;
        x += ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]);
        y += ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]);
    }
    //最后加密的結(jié)果重新寫入到數(shù)組中
    EntryData[0] = x;
    EntryData[1] = y;
}

其實這道題是在做CTF的時候遇到的,弄了半天百思不得其解最終搞出來了,發(fā)現(xiàn)其實是TEA算法.

說一下解密的思路吧.

x +=xxx

y+=xxx 這兩個公式總共是執(zhí)行了32輪,可以記做為

(x+=xxx)32

(y+=xxx)32
那么解密的時候肯定也是執(zhí)行32輪,每次遞減,且順序變換過來
(y-=xxx)
(x-=xxx)
其中這里的xxx就是異或的公式,根據(jù)其特性我們不需要改公式中的內(nèi)容.我們可以看做是 a ^ b ^ c 反過來
c ^ b ^ a 是一樣的.
既然倒過來了.我們的變量(黃金分割)32輪的和也要依次遞減來進行解密
所以解密算法如下
void Decrypt(long* EntryData, long* Key)
{
    //分別加密數(shù)組中的前四個字節(jié)與后4個字節(jié),4個字節(jié)為一組每次加密兩組
    unsigned long x = EntryData[0];
    unsigned long y = EntryData[1];

    unsigned long sum = 0;
    unsigned long delta = 0x9E3779B9;
    sum = delta << 5;   //注意這里,sum = 32輪之后的黃金分割值. 因為我們要反序解密.
    //總共加密32輪 那么反序也解密32輪
    for (int i = 0; i < 32; i++)
    {

// 先將y解開 然后參與運算在解x
        y -= ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]);
        x -= ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]);
        sum -= delta;
    }
    //最后加密的結(jié)果重新寫入到數(shù)組中
    EntryData[0] = x;
    EntryData[1] = y;
}

最終實現(xiàn)結(jié)果

int main()
{
   
  

    long Data[3] = { 0x44434241,0x48474645,0x0 };
    printf("待加密的數(shù)值 = %s
", (char*)Data);

    long key[4] = { 0x11223344,0x55667788,0x99AABBCC,0xDDEEFF11 };

    //Encrypt每次只是加密4字節(jié)數(shù)組中的兩組(也就是每次加密8個字節(jié)) 如果你數(shù)據(jù)多.可以來個for循環(huán)來循環(huán)加密,但是Entrypt內(nèi)部還有32次循環(huán),所以速度上還是會有點影響.
    Encrypt(Data, key);
    printf("加密后的數(shù)值 = %s
", (char*)Data);
    Decrypt(Data, key);
    printf("解密后的數(shù)值 = %s
", (char*)Data);
    system("pause");
}

實現(xiàn)結(jié)果

完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

void Encrypt(long* EntryData, long* Key)
{
    //分別加密數(shù)組中的前四個字節(jié)與后4個字節(jié),4個字節(jié)為一組每次加密兩組
    unsigned long x = EntryData[0];
    unsigned long y = EntryData[1];

    unsigned long sum = 0;
    unsigned long delta = 0x9E3779B9;
    //總共加密32輪
    for (int i = 0; i < 32; i++)
    {
        sum += delta;
        x += ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]);
        y += ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]);
    }
    //最后加密的結(jié)果重新寫入到數(shù)組中
    EntryData[0] = x;
    EntryData[1] = y;
}

void Decrypt(long* EntryData, long* Key)
{
    //分別加密數(shù)組中的前四個字節(jié)與后4個字節(jié),4個字節(jié)為一組每次加密兩組
    unsigned long x = EntryData[0];
    unsigned long y = EntryData[1];

    unsigned long sum = 0;
    unsigned long delta = 0x9E3779B9;
    sum = delta << 5;   //注意這里,sum = 32輪之后的黃金分割值. 因為我們要反序解密.
    //總共加密32輪 那么反序也解密32輪
    for (int i = 0; i < 32; i++)
    {

        // 先將y解開 然后參與運算在解x
        y -= ((x << 4) + Key[2]) ^ (x + sum) ^ ((x >> 5) + Key[3]);
        x -= ((y << 4) + Key[0]) ^ (y + sum) ^ ((y >> 5) + Key[1]);
        sum -= delta;
    }
    //最后加密的結(jié)果重新寫入到數(shù)組中
    EntryData[0] = x;
    EntryData[1] = y;
}

int main()
{



    long Data[3] = { 0x44434241,0x48474645,0x0 };
    printf("待加密的數(shù)值 = %s
", (char*)Data);

    long key[4] = { 0x11223344,0x55667788,0x99AABBCC,0xDDEEFF11 };

    //Encrypt每次只是加密4字節(jié)數(shù)組中的兩組(也就是每次加密8個字節(jié)) 如果你數(shù)據(jù)多.可以來個for循環(huán)來循環(huán)加密,但是Entrypt內(nèi)部還有32次循環(huán),所以速度上還是會有點影響.
    Encrypt(Data, key);
    printf("加密后的數(shù)值 = %s
", (char*)Data);
    Decrypt(Data, key);
    printf("解密后的數(shù)值 = %s
", (char*)Data);
    system("pause");
}

總結(jié)

以上是生活随笔為你收集整理的TEA算法解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品久久久久久久免费人妻 | 日本在线观看a | av看片在线 | 爱爱视频免费看 | 岛国精品在线观看 | 麻豆精品一区 | 亚洲综合天堂 | 日日日日日日 | 国产日韩在线播放 | 日批国产| 国产又粗又大又长 | 最新理伦片eeuss影院 | 国产乱码一区二区三区 | 免费色视频 | 久久嫩 | 制服丝袜在线播放 | 中国国产黄色片 | 欧美日韩影院 | 中文字幕精品无码一区二区 | 在线看黄色网 | 中文字幕一区二区人妻电影 | 国产91精品露脸国语对白 | 成年人小视频 | 精品午夜一区二区三区 | 国产91综合一区在线观看 | 欧美精品网 | 黄色在线观看视频 | 少妇特黄a一区二区三区 | 玖玖爱国产 | 亚洲最新偷拍 | 久久久免费 | 亚洲精品国产一区 | 成色网 | 男女在楼梯上高潮做啪啪 | 伊人精品视频在线观看 | 国产一级爱c视频 | 久久这里只有 | 免费黄色一级视频 | 波多野结衣在线观看视频 | 女女互慰揉小黄文 | 天天摸夜夜爽 | 在线中文字幕第一页 | 中文在线а√天堂官网 | 亚洲精品小视频在线观看 | 大尺度电影在线 | 免费看av网 | 黄色免费网站在线观看 | 极品少妇xxx | 日韩影院在线 | 大尺度做爰无遮挡露器官 | 五月天久久婷婷 | 国产做爰xxxⅹ性视频国 | 自拍偷拍欧美视频 | 久久精品视屏 | 国产高潮在线 | 黄色网免费看 | 亚洲第一页在线观看 | 久久久久久久极品 | 潘金莲黄色一级片 | 少妇精品视频一区二区 | 欧美粗大猛烈 | 成人一级黄色片 | wwyoujizzcom| 天堂8在线天堂资源bt | 淫片网站 | 饥渴丰满的少妇喷潮 | 女人天堂网 | 我们的2018中文免费看 | 99久久夜色精品国产亚洲 | 夜夜导航 | 麻豆av网站 | 欧美做受喷浆在线观看 | 激情欧美在线 | 综合视频一区 | 国产农村妇女精品一区二区 | 午夜三区 | 秋霞午夜鲁丝一区二区老狼 | 日本熟妇人妻xxxxx | 亚洲精品777 | 高清在线一区 | 亚洲精品乱码久久久久久9色 | 国产成人av无码精品 | 亚洲乱子伦 | 深爱婷婷网| 亚洲一级片 | 日韩香蕉视频 | 青青草国产精品 | 欧美福利一区二区三区 | 中文字幕观看在线 | 嫩草影院av| 日日爽夜夜爽 | 亚洲天天操 | 精品自拍一区 | 黄色三级片毛片 | 爱爱三级视频 | 日韩免费在线 | 最新视频在线观看 | 亚洲精品人人 | 激情综合网激情 |