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

📄 dechash.pas

📁 cipher 5.1。一个几乎包含了所有常见的加密算法的控件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{Copyright:      Hagen Reddmann  HaReddmann at T-Online dot de
 Author:         Hagen Reddmann
 Remarks:        freeware, but this Copyright must be included
 known Problems: none
 Version:        5.1,  Part I from Delphi Encryption Compendium  ( DEC Part I)
                 Delphi 5

 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

}

unit DECHash;

interface

uses SysUtils, Classes, DECUtil, DECFmt;

{$I VER.INC}
                                          
type
{all Hash Classes}
  THash_MD2             = class;  {$DEFINE THash_MD2_asm}
  THash_MD4             = class;  {$DEFINE THash_MD4_asm}
  THash_MD5             = class;  {$DEFINE THash_MD5_asm}
  THash_RipeMD128       = class;  {$DEFINE THash_RipeMD128_asm}
  THash_RipeMD160       = class;  {$DEFINE THash_RipeMD160_asm}
  THash_RipeMD256       = class;  {$DEFINE THash_RipeMD256_asm}
  THash_RipeMD320       = class;  {$DEFINE THash_RipeMD320_asm}
  THash_SHA             = class;  {$DEFINE THash_SHA_asm}
  THash_SHA1            = class;
  THash_SHA256          = class;  {.$DEFINE THash_SHA256_asm}
  THash_SHA384          = class;  {$DEFINE THash_SHA384_asm}
  THash_SHA512          = class;
  THash_Haval128        = class;  {$DEFINE THashBaseHaval_asm}
  THash_Haval160        = class;
  THash_Haval192        = class;
  THash_Haval224        = class;
  THash_Haval256        = class;
  THash_Tiger           = class;  {$DEFINE THash_Tiger_asm}
  THash_Panama          = class;  {.$DEFINE THash_Panama_asm}
  THash_Whirlpool       = class;  {$DEFINE THashBaseWhirlpool_asm}
  THash_Whirlpool1      = class;
  THash_Square          = class;  {$DEFINE THash_Square_asm}
  THash_Snefru128       = class;  {$DEFINE THash_Snefru128_asm}
  THash_Snefru256       = class;  {$DEFINE THash_Snefru256_asm}
  THash_Sapphire        = class;  {$DEFINE THash_Sapphire_asm}

  TDECHashClass = class of TDECHash;

  TDECHash = class(TDECObject)
  protected
    FCount: array[0..7] of LongWord;
    FBuffer: PByteArray;
    FBufferSize: Integer;
    FBufferIndex: Integer;
    FPaddingByte: Byte;
    procedure DoTransform(Buffer: PLongArray); virtual; abstract;
    procedure DoInit; virtual; abstract;
    procedure DoDone; virtual; abstract;
  public
    destructor Destroy; override;

    procedure Init;
    procedure Calc(const Data; DataSize: Integer); virtual;
    procedure Done;

    function Digest: PByteArray; virtual; abstract;
    function DigestStr(Format: TDECFormatClass = nil): Binary; virtual;

    class function DigestSize: Integer; virtual; abstract;
    class function BlockSize: Integer; virtual; abstract;

    class function CalcBuffer(const Buffer; BufferSize: Integer; Format: TDECFormatClass = nil): Binary;
    class function CalcStream(const Stream: TStream; Size: Int64; Format: TDECFormatClass = nil; const Progress: IDECProgress = nil): Binary;
    class function CalcBinary(const Data: Binary; Format: TDECFormatClass = nil): Binary;
    class function CalcFile(const FileName: String; Format: TDECFormatClass = nil; const Progress: IDECProgress = nil): Binary;

    class function MGF1(const Data: Binary; MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
    class function MGF1(const Data; DataSize, MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
    class function KDF2(const Data,Seed: Binary; MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
    class function KDF2(const Data; DataSize: Integer; const Seed; SeedSize, MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
   // DEC's own KDF+MGF
    class function MGFx(const Data; DataSize, MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
    class function MGFx(const Data: Binary; MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
    class function KDFx(const Data,Seed: Binary; MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
    class function KDFx(const Data; DataSize: Integer; const Seed; SeedSize, MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
  published
    property PaddingByte: Byte read FPaddingByte write FPaddingByte;
  end;

  THash_MD2 = class(TDECHash)
  private
    FDigest: array[0..63] of Byte;
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoInit; override;
    procedure DoDone; override;
  public
    class function DigestSize: Integer; override;
    class function BlockSize: Integer; override;
    function Digest: PByteArray; override;
  end;

  THashBaseMD4 = class(TDECHash)
  private
    FDigest: array[0..9] of LongWord;
  protected
    procedure DoInit; override;
    procedure DoDone; override;
  public
    class function DigestSize: Integer; override;
    class function BlockSize: Integer; override;
    function Digest: PByteArray; override;
  end;

  THash_MD4 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
  end;

  THash_MD5 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
  end;

  THash_RipeMD128 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
  end;

  THash_RipeMD160 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
  public
    class function DigestSize: Integer; override;
  end;

  THash_RipeMD256 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoInit; override;
  public
    class function DigestSize: Integer; override;
  end;

  THash_RipeMD320 = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
  public
    class function DigestSize: Integer; override;
  end;

  THash_SHA = class(THashBaseMD4)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoDone; override;
  public
    class function DigestSize: Integer; override;
  end;

  THash_SHA1 = class(THash_SHA);

  THash_SHA256 = class(THash_SHA)
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoInit; override;
  public
    class function DigestSize: Integer; override;
  end;

  THash_SHA384 = class(TDECHash)
  private
    FDigest: array[0..7] of Int64;
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoInit; override;
    procedure DoDone; override;
  public
    class function DigestSize: Integer; override;
    class function BlockSize: Integer; override; // 128
    function Digest: PByteArray; override;
  end;

  THash_SHA512 = class(THash_SHA384)
  protected
    procedure DoInit; override;
  public
    class function DigestSize: Integer; override;
  end;

  THashBaseHaval = class(TDECHash)
  private
    FDigest: array[0..7] of LongWord;
    FRounds: Integer; {3 - 5}
    FTransform: procedure(Buffer: PLongArray) of object;
    procedure SetRounds(Value: Integer);
  protected
    procedure DoTransform (Buffer: PLongArray); override;
    procedure DoTransform3(Buffer: PLongArray);
    procedure DoTransform4(Buffer: PLongArray);
    procedure DoTransform5(Buffer: PLongArray);
    procedure DoInit; override;
    procedure DoDone; override;
  public
    class function BlockSize: Integer; override;
    function Digest: PByteArray; override;
  published
    property Rounds: Integer read FRounds write SetRounds;
  end;

  THash_Haval128 = class(THashBaseHaval)
  public
    class function DigestSize: Integer; override;
  end;

  THash_Haval160 = class(THashBaseHaval)
  public
    class function DigestSize: Integer; override;
  end;

  THash_Haval192 = class(THashBaseHaval)
  public
    class function DigestSize: Integer; override;
  end;

  THash_Haval224 = class(THashBaseHaval)
  public
    class function DigestSize: Integer; override;
  end;

  THash_Haval256 = class(THashBaseHaval)
  public
    class function DigestSize: Integer; override;
  end;

  THash_Tiger = class(THashBaseMD4)
  private
    FRounds: Integer;
    procedure SetRounds(Value: Integer);
  protected
    procedure DoTransform(Buffer: PLongArray); override;
    procedure DoInit; override;
  public
    class function DigestSize: Integer; override;
  published
    property Rounds: Integer read FRounds write SetRounds;
  end;

  THash_Panama = class(TDECHash)
  private
    FLFSRBuffer: array[0..31, 0..7] of LongWord;
    FDigest: array[0..16] of LongWord;
    FTap: LongWord;
  protected
    procedure DoInit; override;
    procedure DoDone; override;

⌨️ 快捷键说明

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