unit DUninstallPW; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TDlgUninstallPW = class(TForm) Label1: TLabel; edPass: TEdit; btnOk: TButton; btnCancel: TButton; procedure btnOkClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var DlgUninstallPW: TDlgUninstallPW; implementation uses ManagerService, Tocsg.Hash, Tocsg.Safe, EM.Tocsg.hash, Soap.EncdDecd; resourcestring RS_InputPass = '비밀번호를 입력해 주십시오.'; RS_WrongPass = '비밀번호가 맞지 않습니다.'; {$R *.dfm} procedure TDlgUninstallPW.btnOkClick(Sender: TObject); var sha: TSHA256Hash; s256d: TSHA256Digest; sHash: String; begin edPass.Text := Trim(edPass.Text); if edPass.Text = '' then begin MessageBox(Handle, PChar(RS_InputPass), PChar(Caption), MB_ICONWARNING or MB_OK); edPass.SetFocus; exit; end; if gMgSvc.PrefModel.UninstallPW[1] = ':' then begin Guard(sha, TSHA256Hash.Create); sha.SetBuffer(@AnsiString(edPass.Text)[1], Length(edPass.Text)); sha.WorkFinalToDigest(s256d); sHash := ':' + EncodeBase64(@s256d, SizeOf(s256d)); if (gMgSvc = nil) or (sHash <> gMgSvc.PrefModel.UninstallPW) then begin MessageBox(Handle, PChar(RS_WrongPass), PChar(Caption), MB_ICONWARNING or MB_OK); edPass.SetFocus; exit; end; end else if (gMgSvc = nil) or (gMgSvc.PrefModel.UninstallPW <> edPass.Text) then begin MessageBox(Handle, PChar(RS_WrongPass), PChar(Caption), MB_ICONWARNING or MB_OK); edPass.SetFocus; exit; end; ModalResult := mrOk; end; end.