TEA加密 cmd下使用

在安全学领域,TEA(Tiny Encryption Algorithm)是一种分组,它的实现非常简单,通常只需要很精短的几行代码。TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。

以下是TEA算法C++实现(于4月21日改进了参数的设置)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<conio.h>
#include<unistd.h>
#define num_rounds 32
using namespace std;
void encipher(unsigned int v[2],unsigned int key[4])
{
    unsigned int v0=v[0],v1=v[1],sum=0,delta=0x9E3779B9;
    for(int i=0;i<num_rounds;i++)
    {
        v0+=(((v1<<4)^(v1>>5))+v1)^(sum+key[sum&3]);
        sum+=delta;
        v1+=(((v0<<4)^(v0>>5))+v0)^(sum+key[(sum>>11)&3]);
    }
    v[0]=v0;
    v[1]=v1;
}
void decipher(unsigned int v[2],unsigned int key[4])
{
    unsigned int v0=v[0],v1=v[1],delta=0x9E3779B9,sum=delta*num_rounds;
    for(int i=0;i<num_rounds;i++)
    {
        v1-=(((v0<<4)^(v0>>5))+v0)^(sum+key[(sum>>11)&3]);
        sum-=delta;
        v0-=(((v1<<4)^(v1>>5))+v1)^(sum+key[sum&3]);
    }
    v[0]=v0;
    v[1]=v1;
}
int main(int argc,char *argv[])
{
    if(argc!=4&&argc!=5)
    {
        cout<<endl<<"Usage: e(encipher) password sourceFileName outFileName"<<endl;
        cout<<endl<<"Usage: d(decipher) password sourceFileName outFileName"<<endl;
        return 0;
    }
    char password[100]={0};
    strcpy(password,argv[2]);
    if(argc==4)
    {
        FILE *fpin=fopen(argv[3],"rb");
        FILE *fpout=fopen("temporary","wb+");
        if(fpin!=NULL&&fpout!=NULL)
        {
            while(!feof(fpin))
            {
                unsigned int msg[2];
                msg[0]=msg[1]=0;
                if(fread(msg,1,8,fpin)==0)
                    break;
                if(argv[1][0]=='e')
                    encipher(msg,(unsigned int*)password);
                else
                    decipher(msg,(unsigned int*)password);
                fwrite(msg,1,8,fpout);
            }
            fclose(fpin);
            fclose(fpout);
        }
        unlink(argv[3]);
        rename("temporary",argv[3]);
    }
    else
    {
        FILE *fpin=fopen(argv[3],"rb");
        FILE *fpout=fopen(argv[4],"wb");
        if(fpin!=NULL&&fpout!=NULL)
        {
            while(!feof(fpin))
            {
                unsigned int msg[2];
                msg[0]=msg[1]=0;
                if(fread(msg,1,8,fpin)==0)
                    break;
                if(argv[1][0]=='e')
                    encipher(msg,(unsigned int*)password);
                else
                    decipher(msg,(unsigned int*)password);
                fwrite(msg,1,8,fpout);
            }
            fclose(fpin);
            fclose(fpout);
        }
    }
}

代码在cmd下使用需要传入5个参数,分别是

.exe的名称、e或d(传入不是e的时候默认解密)、加密\解密密码、源文件、目标文件


注意!!

源文件和目标文件不能是同一个文件,否则会造成文件的丢失

TEA算法可以应用在bat脚本下,用于文件的加密和防护。

—————————————————————————————————————————————

4月21日

源代码修正,适用于4个参数与5个参数的情况

4个参数即( 程序名 运行方式 密码 源文件)此时源文件即目标文件,TEA.exe将直接对密源文件内容加密,加密后的内容也存储在源文件中,省去了bat下删除和重命名的麻烦。

缺点是无法直接对加密后的文件修改类型(当然bat批处理后这些都不是问题)

阅读更多
个人分类: 信安
上一篇openJudge 特殊密码锁 ACM
下一篇关于谷歌浏览器主页被篡改无法修正的样例分析与解决方案
想对作者说点什么? 我来说一句

Java Tea加密实现

2016年11月10日 5KB 下载

没有更多推荐了,返回首页

关闭
关闭