⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xaes.h

📁 AES for BCB5/6 控件 安装: 1)展开XAES.ZIP 2)启动C++ Builder
💻 H
字号:
//---------------------------------------------------------------------------
// AES加密算法
//     2004-09-16 Netsys封装,mike888@163.net
//---------------------------------------------------------------------------
/*
   告别DES 迎接AES


   你的数据需要加密保护吗?你还在使用DES,3DES吗?

   旧的数据加密标准DES自二十世纪七十年代采用以来,基本上算是不错的数据加密算法。
不过由于它使用的密钥相对较小(56位),采用强力攻击下DES有被攻破的纪录。

   实际上,现在对安全性能要求较高的用户愿意采用加强型的DES,叫做3DES。用3DES进行
加密,需要对一小段数据运算3次,不言而喻,加密的速率大大降低。

   随着Internet、智能卡、手机和掌上电脑等应用日益普及,对通信安全的要求也增强了。
不过这些小型设备需要的是,用更少代码,占用更少资源的数据加密算法,所以3DES不是今后
这方面需求的解决办法。

   美国国家技术标准委员会(NIST)1996年启动了“先进加密标准”AES的制定工作,经过三
年漫长的过程,最终于2000年10月选定了比利时的研究成果“Rijndael”作为AES的基础(最
后的备选方案有五套,向全世界公布方案,征求破解,最后取胜的Rijndael以高安全度,高
速度和易于计算机处理而中选)。

   AES和3DES比较

                                  AES                3DES
   ------------------------------------------------------------------------
   算法类型(数据加密)      对称block密码       对称feistel密码
   密钥大小                  128、192、256位     112位或168位
   速度                            高                  低
   解密时间(每秒尝试255个)   1490000亿年           46亿年
   资源消耗                       低                    中
   ------------------------------------------------------------------------


   坚固的安全性能

   AES内部有更简洁精确的数学算法,而加密数据只需一次通过。AES被设计成高速,坚固的
安全性能,而且能够支持各种小型设备。AES与3DES相比,不仅是安全性能有重大差别,使用
性能和资源有效利用上也有很大差别。

   RSA公司是已广泛运用的数据加密算法和开发工具包的开发商,已经宣布支持AES。(RSA
也参与了AES的竞选,只是它的加密算法未被选中。

   Cisco公司也已经发表支持AES的文章,对虚拟专用网(VPN)来说,IETF已经制定了在IP安
全标准中AES的实施细则。

   IT业界愿意在网络中使用AES的原因是AES能提供更快的数据加密方法,且与各种不同的
产品兼容。如无线E-mail、财务交易和一些特殊应用场合。

   遵循AES标准,IT界的最大收益是使产品标准化并降低成本,取得更广的兼容性、更多的
创新和更强的灵活性。

   IT部门要采取的一个重要步骤是,针对要加密的数据处理设备制定方案时,与AES标准兼
容并符合AES要求。如果目前还不能支持AES,最好制定一个时间表,以便到时能免费升级。


对AES感兴趣的朋友可去看这本书:
《高级加密标准(AES)算法—Rijndael的设计》
  出版社 : 清华大学出版社
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BI99652365

*/


//---------------------------------------------------------------------------

#ifndef XAesH
#define XAesH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>

//---------------------------------------------------------------------------
class PACKAGE TXAes : public TComponent
{
private:
        int FKeyLen;
        void __fastcall SetKeyLen( int AKeyLen );
protected:

public:
        __fastcall TXAes(TComponent* Owner);

        //---------------------------------------------------------------------------
        /* 辅助函数 */
        //---------------------------------------------------------------------------

        // 将16进制转换为字符串,例如:输入0x12,0x34,0x56,0x78,输出"12345678"
        char * __fastcall HexToStr(BYTE *src,char *dest,int inlen);

        // 将字符串转换为16进制,不足前补0,例如:输入"12345678",输出0x12,0x34,0x56,0x78)
        bool __fastcall StrToHex(char *src,int inlen,BYTE *dest,int outlen);

        //---------------------------------------------------------------------------
        // 加解密函数
        //---------------------------------------------------------------------------
        // (1) 数据块长度必须是 16 byte 的整数倍
        // (2) 输入和输出可以使用相同的buf
        //---------------------------------------------------------------------------

        // 加密一块
        bool __fastcall AESEncBlk(const BYTE in_blk[], BYTE out_blk[], BYTE key[]);

        // 解密一块
        bool __fastcall AESDecBlk(const BYTE in_blk[], BYTE out_blk[], BYTE key[]);

        // 加密多块(CBC,IV长度16 bytes,可设为全0x0)
        bool __fastcall AESEncBuf( BYTE in_buf[], UINT inlen, BYTE out_buf[], BYTE key[], BYTE IV[]);

        // 解密多块(CBC,IV长度16 bytes,可赋为全0x0)
        bool __fastcall AESDecBuf( BYTE in_buf[], UINT inlen, BYTE out_buf[], BYTE key[], BYTE IV[]);

        // 加密文件,输入和输出文件名不能相同
        bool __fastcall AESEncFile( char *filein, char *fileout,BYTE key[] );

        // 解密文件,输入和输出文件名不能相同
        // 返回: 1:成功, 0:文件打开错;-1:密钥错; -2: 文件长度错;-3:读错
        int __fastcall AESDecFile( char *filein, char *fileout,BYTE key[] );

__published:

        __property int KeyLen = { read = FKeyLen, write = SetKeyLen}; // 密钥长度,只能选16,24,32 byte
};
//---------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -