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

📄 7zaes.h

📁 由7-zip提供的压缩、解压缩程序
💻 H
字号:
// 7z_AES.h#ifndef __CRYPTO_7Z_AES_H#define __CRYPTO_7Z_AES_H#include "Common/MyCom.h"#include "Common/Types.h"#include "Common/Buffer.h"#include "Common/Vector.h"#include "../../ICoder.h"#include "../../IPassword.h"#ifndef CRYPTO_AES#include "../../Archive/Common/CoderLoader.h"#endif// {23170F69-40C1-278B-0601-810000000100}DEFINE_GUID(CLSID_CCrypto_AES256_Encoder, 0x23170F69, 0x40C1, 0x278B, 0x06, 0x01, 0x81, 0x00, 0x00, 0x00, 0x01, 0x00);// {23170F69-40C1-278B-0601-810000000000}DEFINE_GUID(CLSID_CCrypto_AES256_Decoder, 0x23170F69, 0x40C1, 0x278B, 0x06, 0x01, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00);namespace NCrypto {namespace NSevenZ {const int kKeySize = 32;class CKeyInfo{public:  int NumCyclesPower;  UInt32 SaltSize;  Byte Salt[16];  CByteBuffer Password;  Byte Key[kKeySize];  bool IsEqualTo(const CKeyInfo &a) const;  void CalculateDigest();  CKeyInfo() { Init(); }  void Init()  {    NumCyclesPower = 0;    SaltSize = 0;    for (int i = 0; i < sizeof(Salt); i++)      Salt[i] = 0;  }};class CKeyInfoCache{  int Size;  CObjectVector<CKeyInfo> Keys;public:  CKeyInfoCache(int size): Size(size) {}  bool Find(CKeyInfo &key);  // HRESULT Calculate(CKeyInfo &key);  void Add(CKeyInfo &key);};class CBase{  CKeyInfoCache _cachedKeys;protected:  CKeyInfo _key;  Byte _iv[16];  // int _ivSize;  void CalculateDigest();  CBase();};class CBaseCoder:   public ICompressFilter,  public ICryptoSetPassword,  public CMyUnknownImp,  public CBase{protected:  #ifndef CRYPTO_AES  CCoderLibrary _aesLibrary;  #endif  CMyComPtr<ICompressFilter> _aesFilter;  virtual HRESULT CreateFilter() = 0;  #ifndef CRYPTO_AES  HRESULT CreateFilterFromDLL(REFCLSID clsID);  #endifpublic:  STDMETHOD(Init)();  STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size);    STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);};class CEncoder:   public CBaseCoder,  public ICompressWriteCoderProperties{  virtual HRESULT CreateFilter();public:  MY_UNKNOWN_IMP2(      ICryptoSetPassword,      ICompressWriteCoderProperties)  STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);};class CDecoder:   public CBaseCoder,  public ICompressSetDecoderProperties2{  virtual HRESULT CreateFilter();public:  MY_UNKNOWN_IMP2(      ICryptoSetPassword,      ICompressSetDecoderProperties2)  STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);};}}#endif

⌨️ 快捷键说明

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