?? ucrypt.pas
字號(hào):
SETLENGTH(S1,6);
FOR I:=1 TO 6 DO BEGIN
TRY
S1[I]:=CHR(STRTOINT('$'+SOURCE[I*2-1]+SOURCE[I*2]));
EXCEPT
RESULT:=FALSE;
EXIT;
END;
END;
TMPNUM:=ORD(S1[6]);
S1:=COPY(S1,1,5);
SETLENGTH(S2,10);
FOR I:=0 TO 9 DO
S2[I+1]:=CHR((TMPNUM+I) MOD 255);
S1:=DECRYPTSTRING(S1,S2);
IF S1='' THEN
EXIT;
S1:=S1+CHR(TMPNUM);
S2:=DECRYPTSTRING(S1,KEY);
IF S2='' THEN
EXIT;
S1:='';
TMPNUM:=0;
FOR I:=1 TO LENGTH(S2) DO
S1:=S1+INTTOHEX(ORD(S2[I]),2);
FOR I:=1 TO 5 DO BEGIN
TRY
TMPNUM:=TMPNUM+STRTOINT('$'+S1[I*2-1]+S1[I*2]);
EXCEPT
RESULT:=FALSE;
EXIT;
END;
END;
TMPNUM:=TMPNUM MOD 255;
IF TMPNUM<>STRTOINT('$'+COPY(S1,11,2)) THEN
EXIT;
TMPNUM:=STRTOINT('$'+COPY(S1,1,6));
DATE1:=STRTOINT('$'+COPY(S1,7,4));
GUESTID:=TMPNUM;
LASTDATE:=YEAR2000+DATE1;
RESULT:=TRUE;
END;
FUNCTION DECRYPTSID(const SOURCE:STRING;VAR GUESTID:LONGWORD;VAR LASTDATE:TDATETIME):BOOLEAN;
BEGIN
result:=decryptid(source,'This is Adel Service ID(ASID)',guestid,lastdate);
END;
FUNCTION MAKEsn(PRONUM,GUESTID:INTEGER;NKEY:BYTE;LASTDATE:TDATETIME):string;
var
i:integer;
TMPNUM,lastd:integer;
TMPSTR,TMPSTR1,TMPSTR2,TMPSTR3,TMPSTR4:STRING;
snkey:string;
BEGIN
RESULT:='';
IF proNUM=0 THEN
EXIT;
if guestid=0 then
exit;
TMPSTR:=INTTOHEX(proNUM,8);
SETLENGTH(TMPSTR1,4);
FOR I:=1 TO 4 DO
TMPSTR1[I]:=CHR(STRTOINT('$'+COPY(TMPSTR,I*2-1,2)));
TMPSTR:=INTTOHEX(guestid,6);
SETLENGTH(TMPSTR2,4);
FOR I:=1 TO 3 DO
TMPSTR2[I]:=CHR(STRTOINT('$'+COPY(TMPSTR,I*2-1,2)));
tmpstr2[4]:=chr(nkey);
if lastdate<=180 then
lastd:=round(lastdate)
else
lastd:=ROUND(lastdate-year2000);
setlength(tmpstr3,2);
tmpstr:=inttohex(lastd,4);
FOR I:=1 TO 2 DO
TMPSTR3[I]:=CHR(STRTOINT('$'+COPY(TMPSTR,I*2-1,2)));
tmpstr:=tmpstr1+tmpstr2+tmpstr3;
tmpstr:=cryptstring(tmpstr,'This is legal software. Thank you!');
if tmpstr='' then
exit;
nkey:=ord(tmpstr[8]);
SETLENGTH(SNKEY,10);
for i:=0 to 9 do begin
tmpnum:=nkey+i;
if tmpnum>255 then
tmpnum:=tmpnum-255;
snkey[i+1]:=chr(tmpnum);
end;
tmpstr:=copy(tmpstr,1,7)+copy(tmpstr,9,2);
tmpstr:=cryptstring(tmpstr,snkey);
if tmpstr='' then
exit;
tmpstr1:=copy(tmpstr,1,7)+chr(nkey)+copy(tmpstr,8,2);
tmpstr:='';
for i:=1 to 10 do
tmpstr:=tmpstr+inttohex(ord(tmpstr1[i]),2);
TMPSTR4:=CRYPTstring('Adel',tmpstr);
if tmpstr4='' then
exit;
for i:=1 to 4 do
tmpstr:=tmpstr+inttohex(ord(tmpstr4[i]),2);
result:=tmpstr;
END;
function cryptstring(const source,key:string):string;
begin
result:='';
if (source='') or (key='') then
exit;
if not begincrypt(key) then
exit;
result:=crypt(source,true);
end;
function decryptstring(const source,key:string):string;
begin
result:='';
if (source='') or (key='') then
exit;
if not begincrypt(key) then
exit;
result:=decrypt(source,true);
end;
function cryptstrasc(const source,key:string):string;
var
s1,s2:string;
i:integer;
begin
result:='';
s1:=cryptstring(source,key);
if s1='' then
exit;
s2:='';
for i:=1 to length(s1) do
s2:=s2+inttohex(ord(s1[i]),2);
result:=s2;
end;
function decryptstrasc(const source,key:string):string;
var
s1:string;
i,j:integer;
begin
result:='';
if (length(source) mod 2)<>0 then
exit;
j:=length(source) div 2;
s1:='';
for i:=1 to j do BEGIN
TRY
s1:=s1+chr(strtoint('$'+source[i*2-1]+source[i*2]));
EXCEPT
REsULT:='';
EXIT;
END;
END;
result:=decryptstring(s1,key);
end;
function cryptxtcs(const source:string):string;
var
s1,s2:string;
i:byte;
begin
s1:=cryptstring(source,'This Adel System Params(ASP)');
s2:='';
for i:=1 to length(s1) do
s2:=s2+inttohex(ord(s1[i]),2);
result:=s2;
end;
function decryptxtcs(const source:string):string;
var
s1:string;
i,j:byte;
begin
result:='';
if (length(source) mod 2)<>0 then
exit;
j:=length(source) div 2;
s1:='';
for i:=1 to j do BEGIN
TRY
s1:=s1+chr(strtoint('$'+source[i*2-1]+source[i*2]));
EXCEPT
REsULT:='';
EXIT;
END;
END;
result:=decryptstring(s1,'This Adel System Params(ASP)');
end;
function checklimit:BOOLEAN;
VAR
D1,D2,sid,msgSTR:STRING;
cid:dword;
d:integer;
DATE1,DATE2,date0:TDATETIME;
BEGIN
RESULT:=FALSE;
FRM_SYS_DM.QXTCS.CLOSE;
FRM_SYS_DM.QXTCS.OPEN;
D1:=TRIM(FRM_SYS_DM.QXTCS.FIELDBYNAME('LDATE').ASSTRING);
D2:=TRIM(FRM_SYS_DM.QXTCS.FIELDBYNAME('FDATE').ASSTRING);
SID:=TRIM(FRM_SYS_DM.QXTCS.FIELDBYNAME('SYSID').ASSTRING);
IF (LENGTH(D1)<>12) OR (LENGTH(D2)<>12) OR (LENGTH(SID)<>12) THEN BEGIN
BEEP;
APPLICATION.MESSAGEBOX('系統(tǒng)參數(shù)被非法改變','提示',16);
EXIT;
END;
if not ((decryptlimit1(d1,sid,date1)) and (decryptlimit2(d2,sid,date2)) AND
(DECRYPTSID(SID,CID,DATE0))) then begin
BEEP;
APPLICATION.MESSAGEBOX('系統(tǒng)參數(shù)被非法改變','提示',16);
EXIT;
end;
IF CID<>DWORD(FRM_SYS_DM.QXTCS.FieldByName('ID').ASINTEGER) THEN BEGIN
BEEP;
APPLICATION.MESSAGEBOX('系統(tǒng)參數(shù)被非法改變','提示',16);
EXIT;
END;
if date1-year2000=65535 then begin
result:=true;
exit;
end;
IF DATE>DATE1 THEN
DATE1:=DATE;
D:=round(DATE1-DATE);
IF (D<=7) AND (DATE1-DATE2<>7) THEN BEGIN
DATE2:=DATE1-7;
if cryptlimit2(date2,cid,msgSTR) then
myexecsql('UPDATE XTCS SET FDATE='''+msgSTR+'''');
end;
IF (DATE<DATE2) THEN
D:=0;
IF D>7 THEN BEGIN
RESULT:=TRUE;
EXIT;
END;
IF D<=0 THEN
MSGSTR:='你的權(quán)限已經(jīng)到期,是否輸入新的權(quán)限ID?'
ELSE
MSGSTR:='你的權(quán)限再有'+inttostr(d)+'天就要到期了,是否輸入新的權(quán)限ID?';
BEEP;
IF APPLICATION.MESSAGEBOX(PCHAR(MSGSTR),'提示',36)<>IDYES THEN BEGIN
RESULT:=D<>0;
EXIT;
END;
application.CreateForm(tf_input,f_input);
F_INPUT.SID:=SID;
F_INPUT.guestid:=CID;
F_INPUT.LASTDATE:=DATE1;
F_INPUT.firSTDATE:=DATE2;
RESULT:=(f_input.showmodal=MRok) OR (D<>0);
END;
FUNCTION cryptLIMIT(const SOURCE:TDATETIME;CONST GUESTID:LONGWORD;key:string;var DEST:STRING):boolean;
BEGIN
RESULT:=MAKEID(GUESTID,SOURCE,key,DEST);
END;
FUNCTION cryptLIMIT0(const SOURCE:TDATETIME;CONST GUESTID:LONGWORD;var DEST:STRING):boolean;
begin
result:=cryptlimit(source,guestid,'The Input Date Is System Params(2)(ISP)',dest);
end;
FUNCTION cryptLIMIT1(const SOURCE:TDATETIME;CONST GUESTID:LONGWORD;var DEST:STRING):boolean;
begin
result:=cryptlimit(source,guestid,'The System Params(2) Is Next Trigging Date(NTD)',dest);
end;
FUNCTION cryptLIMIT2(const SOURCE:TDATETIME;CONST GUESTID:LONGWORD;var DEST:STRING):boolean;
begin
result:=cryptlimit(source,guestid,'The System Params(3) Is Last Trigged Date(LTD)',dest);
end;
FUNCTION decryptLIMIT(const SOURCE,sid:string;key:string;var DEST:TDATETIME):boolean;
VAR
guestid,GUESTID2:longword;
destdate,lastdate:tdatetime;
BEGIN
RESULT:=FALSE;
if not decryptsid(sid,guestid,lastdate) then
exit;
IF NOT decryptid(source,key,guestid2,DESTdate) THEN
EXIT;
IF GUESTID<>GUESTID2 THEN
EXIT;
DEST:=DESTDATE;
RESULT:=TRUE;
END;
FUNCTION decryptLIMIT0(const SOURCE,sid:string;var DEST:TDATETIME):boolean;
begin
result:=decryptlimit(source,sid,'The Input Date Is System Params(2)(ISP)',dest);
end;
FUNCTION decryptLIMIT1(const SOURCE,sid:string;var DEST:TDATETIME):boolean;
begin
result:=decryptlimit(source,sid,'The System Params(2) Is Next Trigging Date(NTD)',dest);
end;
FUNCTION decryptLIMIT2(const SOURCE,sid:string;var DEST:TDATETIME):boolean;
begin
result:=decryptlimit(source,sid,'The System Params(3) Is Last Trigged Date(LTD)',dest);
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -