TEA加密 cmd下使用

原创 2018年04月17日 15:28:16

在安全学领域,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批处理后这些都不是问题)

Java Interface 是常量存放的最佳地点吗?

Java Interface 是常量存放的最佳地点吗?bright (brightsee@21cn.com)A
  • jstml
  • jstml
  • 2003-06-19 10:22:00
  • 784

TEA加密工具

领导需要对lib库中的一个关键数据进行加密,我就在网上找了TEA加密算法的资料,实现了一个加密算法, 随手给领导做做了这么个工具:  开发工具: VC6...
  • jiftlixu
  • jiftlixu
  • 2012-03-26 17:52:17
  • 2401

TEA和QQTEA

http://mathswork.blog.163.com/blog/static/1400170282010102264755630/ TEA算法由剑桥大学计算机实验室的David Wheeler...
  • oMingZi12345678
  • oMingZi12345678
  • 2015-07-16 09:40:46
  • 1768

QQ加密算法浅谈(TEA加解密算法)

Tencent QQ的加密算法就采用了TEA算法 TEA(Tiny Encryption Algorithm) 是一种优秀的数据加密算法,虽然它比 DES(Data Encryption Standa...
  • D_Q
  • D_Q
  • 2006-03-28 19:58:00
  • 3959

Java Tea加密实现

  • 2016年11月10日 09:45
  • 5KB
  • 下载

Tea 任何长度数据加密的一个实现

如下为tea 加密的一个实现,可以实现任何长度数据的加密。 TEA 是八字节分组,加密之后的长度不是和原来输入明文数据的长度。 把原明文数据长度作为加密数据的一部分存储,在解密的时候还原原始明文的...
  • free2o
  • free2o
  • 2014-03-26 10:15:42
  • 1106

TEA加密算法

  • 2017年07月16日 21:02
  • 6KB
  • 下载

单片机上使用TEA加密通信

单片机上使用TEA加密通信本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.环境:主机:WIN7开发环境:MDK4.72单片机:STM32说明:在项目中单片...
  • jdh99
  • jdh99
  • 2014-08-20 14:43:35
  • 5930

TEA加密算法java版

 这个算法简单,而且效率高,每次可以操作8个字节的数据,加密解密的KEY为16字节,即包含4个int数据的int型数组,加密轮数应为8的倍数,一般比较常用的轮数为64,32,16,推荐用64轮. ...
  • junli0310
  • junli0310
  • 2007-10-13 13:24:00
  • 4484

ios开发Tea加密解密

  • 2015年11月20日 17:13
  • 204KB
  • 下载
收藏助手
不良信息举报
您举报文章:TEA加密 cmd下使用
举报原因:
原因补充:

(最多只允许输入30个字)