亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? security.pas

?? TSecurity提供登陸/注銷/修改口令的控件。(有源代碼)工作在:D1 D2 D3 D4 D5。作者:Ma Jun
?? PAS
字號:
unit Security;
{

TSecurity
Version 1.0
by Ma Jun

email:junma@126.com
home page:http://go.163.com/~delphiws (in chinese)

  You are free to use TSecurity for any purpose. If you do some
  modification, please let me know.

}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TValidatePasswordEvent = function(Sender:TComponent; varUserID:String):String of Object; //由varUserID返回對應的密碼(加密狀態)

type
  TSecurity = class(TComponent)
  private
    // Information about current user
    FUserID   : String;
    FUserName : String;
    FPassword : String;     // Password in Crypted mode
    FUserList : TStrings;
    FLoginLimits : Integer; // Max value for user login input
    FLoginCaption: String;  // label's caption for login form
    FPasswordKey : String;

    FOnUserChanged : TNotifyEvent;
    FOnPasswordChange : TNotifyEvent;
    FOnGetUsers   : TNotifyEvent;
    FOnValidatePassword : TValidatePasswordEvent;

    function  GetPassword:String;
    procedure SetPassword(aValue:String);
    procedure SerUserList(aValue:TStrings);

  protected
    // virtual methode for future purpose
    procedure UserChanged; virtual;
    procedure PasswordChanged; virtual;
    procedure GetUserList; virtual;

  public
    function  Login : Boolean; virtual;
    procedure Logout; virtual;
    procedure ModifyPassword;
    function  ValidatePassword(varID, varPassword:String): Boolean; virtual; // varPassword is not Crypted

    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;

    property UserID :  String read FUserID write FUSerID;
    property UserName: String read FUserName write FUserName;
    property Password: String read GetPassword write SetPassword;

  published
    property LoginCaption : String read FLoginCaption write FLoginCaption;
    property Key : String read FPasswordKey write FPasswordKey;
    property LoginLimits : Integer read FLoginLimits write FLoginLimits default 3;
    property UserList : TStrings read FUserList write SerUserList;
    property OnUserChanged : TNotifyEvent read FOnUserChanged write FOnUserChanged;
    property OnPasswordChanged : TNotifyEvent read FOnPasswordChange write FOnPasswordChange;
    property OnValidatePassword : TValidatePasswordEvent read FOnValidatePassword write FOnValidatePassword;
    property OnGetUsers : TNotifyEvent read FOnGetUsers write FOnGetUsers;
  end;

//  Crypt procedure from DSP,   Action='D' as Crypt, 'E' as Decypt 
function Crypt(Action, Src, Key : String) : String;

procedure Register;

implementation

uses loginfm, modipass;

procedure Register;
begin
  RegisterComponents('Ma Jun', [TSecurity]);
end;

function Crypt(Action, Src, Key : String) : String;
var
   KeyLen    : Integer;
   KeyPos    : Integer;
   offset    : Integer;
   dest      : string;
   SrcPos    : Integer;
   SrcAsc    : Integer;
   TmpSrcAsc : Integer;
   Range     : Integer;
begin
     dest:='';
     KeyLen:=Length(Key);
     KeyPos:=0;
     SrcPos:=0;
     SrcAsc:=0;
     Range:=256;
     if Action = UpperCase('E') then
     begin
          Randomize;
          offset:=Random(Range);
          dest:=format('%1.2x',[offset]);
          for SrcPos := 1 to Length(Src) do
          begin
               SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
               if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
               SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
               dest:=dest + format('%1.2x',[SrcAsc]);
               offset:=SrcAsc;
          end;
     end;
     if Action = UpperCase('D') then
     begin
          offset:=StrToInt('$'+ copy(src,1,2));
          SrcPos:=3;
          repeat
                SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
                if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
                TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
                if TmpSrcAsc <= offset then
                     TmpSrcAsc := 255 + TmpSrcAsc - offset
                else
                     TmpSrcAsc := TmpSrcAsc - offset;
                dest := dest + chr(TmpSrcAsc);
                offset:=srcAsc;
                SrcPos:=SrcPos + 2;
          until SrcPos >= Length(Src);
     end;
     Result:=dest;
end;


{ TSecurity }
constructor TSecurity.Create(AOwner: TComponent);
begin
  inherited;
  FPassword := '';
  FUserID   := '';
  FUserName := '';
  FPasswordKey := 'k#1,hRq8]gF%';
  FUserList := TStringList.Create;
  FLoginLimits := 3;
end;

destructor TSecurity.Destroy;
begin
  inherited;
  FUserList.Free;
end;

function TSecurity.GetPassword: String;
begin
  if FPassword<>'' then Result := Crypt('D', FPassword, FPasswordKey)
                   else Result := '';
end;

procedure TSecurity.GetUserList;
begin
  if Assigned(OnGetUsers) then OnGetUsers(Self);
end;

function TSecurity.Login:Boolean;
var
  mOldID : String;
begin
  Result := False;
  SecurityLoginDialog := TSecurityLoginDialog.Create(Self);
  GetUserList;
  with SecurityLoginDialog do
  begin
    InputLimits := FLoginLimits;
    LabelTitle.Caption := FLoginCaption;
    User.Items.Assign(FUserList);
    if ShowModal=mrOK then
    begin
      mOldID   := UserID;
      UserID   := InputUserID;
      UserName := InputUserName;
      Password := EditPassword.Text;
      if (mOldID<>UserID) and Assigned(FOnUserChanged) then FOnUserChanged(Self);
      Result := True;
    end;
  end;
  SecurityLoginDialog.Free;
end;

procedure TSecurity.Logout;
begin
  FPassword := '';
  FUserID   := '';
  FUserName := '';
  UserChanged;
end;

procedure TSecurity.ModifyPassword;
var
  mOldPass : String;
begin
  if UserID='' then Exit;
  PassModifyDialog := TPassModifyDialog.Create(Self);
  try
    with PassModifyDialog do
    begin
      if ShowModal=mrOK then
      begin
        mOldPass := EditOldPS.Text;
        if not ValidatePassword(UserID, mOldPass) then
           raise Exception.Create('Old Password error!');
        if (EditNewPS.Text<>EditRetryNewPS.Text) then
           raise Exception.Create('The new password was not same!');
        Password := EditNewPS.Text;
        if (mOldPass<>Password) then PasswordChanged;
      end;
    end;
  finally
    PassModifyDialog.Free;
  end;
end;

procedure TSecurity.PasswordChanged;
begin
  if Assigned(FOnPasswordChange) then FOnPasswordChange(Self);
end;

procedure TSecurity.SerUserList(aValue: TStrings);
begin
  FUserList.Assign(aValue);
end;

procedure TSecurity.SetPassword(aValue: String);
begin
  FPassword := Crypt('E', aValue, FPasswordKey);
end;

procedure TSecurity.UserChanged;
begin
  if Assigned(FOnUserChanged) then FOnUserChanged(Self);
end;

function TSecurity.ValidatePassword(varID, varPassword:String): Boolean;
var
  mTruePS : String;
begin
  mTruePS := '';
  Result := False;
  if Assigned(OnValidatePassword) then
  begin
    mTruePS := OnValidatePassword(Self, varID);
    if (varPassword=mTruePS)  then Result := True;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合色自拍一区| 色婷婷狠狠综合| 日韩一卡二卡三卡四卡| 亚洲成av人影院| 欧美精品 日韩| 日本中文字幕一区二区视频| 欧美人牲a欧美精品| 日韩av高清在线观看| 日韩精品在线一区| 国产黄色91视频| 专区另类欧美日韩| 在线亚洲一区二区| 免费成人美女在线观看| 久久九九99视频| 波波电影院一区二区三区| 亚洲精品亚洲人成人网| 欧美高清hd18日本| 激情综合一区二区三区| 中文字幕一区二区三区四区不卡| av电影在线观看不卡| 亚洲国产精品久久久久婷婷884| 欧美日韩精品一区视频| 久久99精品视频| 国产精品久久久久影院| 欧美色偷偷大香| 精品一区二区三区欧美| 中文字幕欧美国产| 欧美三级电影在线看| 国产在线播精品第三| 亚洲另类在线一区| 91精品国产91热久久久做人人| 国产伦精品一区二区三区免费| 综合激情网...| 欧美岛国在线观看| 成人av在线电影| 蜜臀久久久久久久| 亚洲同性同志一二三专区| 欧美一区二区日韩一区二区| 成人精品国产免费网站| 日韩成人一区二区| 国产精品国产三级国产aⅴ无密码| 欧美另类一区二区三区| 成人爱爱电影网址| 久久精品99国产精品| 亚洲精品午夜久久久| 国产香蕉久久精品综合网| 欧美日韩mp4| 99国产精品一区| 国产一区在线精品| 偷拍与自拍一区| 成人欧美一区二区三区在线播放| 日韩一级片在线播放| 在线视频亚洲一区| 成人性视频网站| 日本不卡一区二区| 亚洲一区自拍偷拍| 亚洲视频在线一区二区| 久久久精品国产免费观看同学| 欧美美女直播网站| 91黄色免费看| jlzzjlzz国产精品久久| 国产福利一区在线| 精品一区二区三区影院在线午夜 | 一区二区三区国产精华| 久久精品夜色噜噜亚洲aⅴ| 欧美一卡二卡在线观看| 欧美日韩免费视频| 久久久久国产精品麻豆| 日韩精品中文字幕一区| 日韩一区二区三区av| 欧美丝袜丝交足nylons图片| 99国产精品一区| 99久久精品国产导航| 成人久久18免费网站麻豆| 国产成人综合在线播放| 免费欧美在线视频| 免费精品视频在线| 美女视频黄频大全不卡视频在线播放 | 国产三级欧美三级日产三级99| 欧美一区二区视频网站| 欧美日韩精品是欧美日韩精品| 欧美亚洲一区三区| 欧美日韩一区在线观看| 欧美天堂一区二区三区| 欧美日韩你懂得| 欧美精品高清视频| 日韩一区二区三区免费看 | 免费观看在线色综合| 日韩影院免费视频| 日韩电影免费一区| 麻豆精品视频在线| 久久国产欧美日韩精品| 久88久久88久久久| 国产精品1区2区3区在线观看| 国产一区二区美女诱惑| 成人精品视频一区| 91高清在线观看| 91精品免费在线观看| 亚洲精品在线免费观看视频| 国产午夜精品美女毛片视频| 中文字幕成人在线观看| 国产精品久久久久毛片软件| 成人黄色av网站在线| 色综合久久中文字幕综合网| 在线精品视频一区二区| 日韩一区二区三区电影在线观看| 欧美精品一区二区三区视频| 国产精品无人区| 一区二区在线观看视频| 免费成人美女在线观看.| 成人午夜激情在线| 欧美人狂配大交3d怪物一区| 精品国产欧美一区二区| 国产精品久久久久久久久动漫| 亚洲一区二区三区激情| 精品亚洲国内自在自线福利| 成人午夜免费av| 欧美日韩不卡一区| 中文字幕精品一区 | 亚洲成年人影院| 国产精品99久久不卡二区| 色噜噜夜夜夜综合网| 欧美大片拔萝卜| 亚洲精品伦理在线| 黄色小说综合网站| 在线观看精品一区| 国产日产欧美一区二区视频| 午夜精品久久久久久久久久久| 国内精品写真在线观看| 欧美最猛性xxxxx直播| 久久久国产一区二区三区四区小说 | 天堂久久一区二区三区| 丁香一区二区三区| 亚洲一区在线观看视频| 国产一区二区免费看| 精品视频一区二区不卡| 国产精品理伦片| 美日韩一级片在线观看| 欧洲一区在线电影| 国产精品嫩草99a| 韩国一区二区视频| 欧美日韩久久一区| 日韩久久一区二区| 成人自拍视频在线观看| 日韩精品一区二区三区在线| 一区二区三区四区不卡在线| 丁香激情综合国产| 精品女同一区二区| 视频一区欧美精品| 欧洲在线/亚洲| 亚洲精品第1页| caoporm超碰国产精品| 久久久国产午夜精品| 奇米精品一区二区三区四区| 欧美网站大全在线观看| 亚洲精品视频免费看| www.亚洲在线| 国产精品美女久久福利网站| 国产精品夜夜嗨| 精品国产乱码91久久久久久网站| 日精品一区二区| 欧美日韩精品一区二区三区四区| 一区二区三区日韩在线观看| 99国产精品久久久久久久久久| 国产嫩草影院久久久久| 国产成人精品综合在线观看| 2020国产精品久久精品美国| 狠狠狠色丁香婷婷综合激情| 欧美变态tickling挠脚心| 免费在线欧美视频| 欧美tickling挠脚心丨vk| 色婷婷亚洲一区二区三区| 中文字幕日韩一区二区| 成人不卡免费av| 亚洲人成影院在线观看| 色婷婷亚洲婷婷| 天涯成人国产亚洲精品一区av| 欧美色图12p| 午夜精品久久久| 欧美一级高清大全免费观看| 另类小说图片综合网| 欧美精品一区二| 国产成人精品影视| 最新中文字幕一区二区三区| 97久久精品人人澡人人爽| 日韩一区在线看| 欧美色综合影院| 婷婷久久综合九色国产成人| 欧美一级精品在线| 国产在线一区观看| 国产精品精品国产色婷婷| 色婷婷亚洲综合| 美女任你摸久久| 亚洲国产成人私人影院tom | 91一区二区在线观看| 亚洲一区二区四区蜜桃| 91精品国产麻豆国产自产在线| 久久成人综合网| 国产精品超碰97尤物18| 欧美乱妇15p|