公佈動易2005 算號器的源代碼

這個代碼網上也有別的版本公開過,我這個版本只少量流傳,當然是我自己跟蹤出來的,2006早出來了,先公佈2005的代碼,等2007出來再公開2006的代碼。

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,MD5,BASE64,CLIPBRD, Mask;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label5: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label6: TLabel;
    Label7: TLabel;
    Edit3: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    MaskEdit1: TMaskEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure GenerateSN;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  GenerateSN;
end;

procedure TForm1.GenerateSN;
const
  sBase='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+=';
var
  sDomain,sRandom1,sRandom2,sMD5,sSN,sYear :string;
  cVersion,cDatabase:Char;
  iRandom,i:integer;
  sSN1 : string;
  sSN2 : string;
begin
  sDomain:=Trim(Edit1.Text) ;
  sRandom1:=Trim(Edit2.Text) ;
  iRandom := strToint(sRandom1);
  Memo1.Lines.Clear ;
 


  { 加上版本號 }
  case Combobox1.ItemIndex of
    0: cVersion :='0';
    1: cVersion :='1';
    2: cVersion :='2';
    3: cVersion :='3';
    4: cVersion :='4';
    5: cVersion :='5';
    6: cVersion :='9';
  end;


  { 加上數據庫類型 }
  case Combobox2.ItemIndex of
    0: cDatabase :='a';
    1: cDatabase :='S';
  end;

  { 隨機數 }
  sRandom2:= cVersion + cDatabase + Trim(Edit3.Text) ;

  { 計算MD5的值 }
  sMD5:=cMD5.MD5(sDomain+sRandom2,true );
  Memo1.Lines.Add(sMD5);

  { 轉換成大寫 }
  sMD5:=UpperCase(sMD5);

  { 加上年限 }
  //sYear:='2MjAxNS00LTE5E933D59';  { 10年 }
  //sYear:='2MjA4Ni0xLTIx3426FB1';  { 70年 }
  sYear:=cBase64.StrToBase64(StringReplace(Trim(MaskEdit1.Text),' ','',[rfReplaceAll]));
  sYear:=intTostr(Length(sYear)-10)+sYear;
  sSN1:=sMD5+sRandom2+sYear+'3426FB1';
  Memo1.Lines.Add(sSN1);

  { 填充散列 }
  SetLength(sSN2,1024);
  Randomize;
  for i:=1 to 1024 do
  begin
    sSN2[i]:=sBase[Random(63)+1];
  end;

  { 填充隨機因子 }
  sSN2[121]:=sRandom1[1];

  { 填充加密信息 }
  for i:=1 to 60 do
  begin
    sSN2[(iRandom+1)*i+121]:=sSN1[i];
  end;

  Memo1.Lines.Add('');
  Memo1.Lines.Add(sSN2);

  Clipboard.Astext := sSN2 + sSN2 + sSN2 + sSN2 ;

end;

end.

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章