我做的一个简单加密程序,LOCK为加密,UNLOCK为解密
function TMainForm.Lock(Password: String): WideString;
Var
    Zid,Wid,Ascid,j,Jm,Rid,Count,Zcount,Wcount:Integer;
    Tmp,DestString,Hex:String;
    TmpChar:Char;
    SourChar,DescChar:Array[0..15] of Char;
begin
Try
    Randomize;
    Count:=Length(Password);
    For j:=1 to Count do
    begin
        Zid:=Random(2100);
        Rid:=Random(8)+1;
        Wid:=Random(999);
        Zcount:=Length(IntToStr(Zid));
        Wcount:=Length(IntToStr(Wid));
        Ascid:=ord(Password[j])+Ord(Rid);
        Hex:=IntToHex(StrToInt(IntToStr(Zid)+IntToStr(Wid)+IntToStr(Ascid)),16);
        if DestString='' then
            DestString:=Hex+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid)
        else
            DestString:=DestString+Hex+StrPas(DescChar)+IntToStr(Zcount)+IntToStr(Wcount)+IntToStr(Rid);
    end;
    Result:=DestString;
Except
    Result:='';
end;
end;function TMainForm.UnLock(LockPassword: WideString): String;
var
    i,j,Bi,Zid,Rid,Wid,DescId,Count,HexInt:Integer;
    Tmp,TmpSub,DescString,DescTmp:String;
    DescChar:Array[0..15] of char;
begin
    Try
        Count:=Round(Length(LockPassword)/19);
        Bi:=1;
        For i:=1 to Count do
        begin
            Tmp:=Copy(LockPassword,Bi,19);
            For j:=0 to 2 do
            begin
                TmpSub:=Copy(Tmp,Length(Tmp)-j,1);
                if j=0 then
                    Rid:=StrToInt(TmpSub)
                else if j=1 then
                    Wid:=StrToInt(TmpSub)
                else if j=2 then
                    Zid:=StrToInt(TmpSub);
            end;
            Bi:=Bi+19;
            HexInt:=HexToInt(Copy(Tmp,1,16));
            DescId:=StrToInt(Copy(IntToStr(HexInt),Zid+Wid+1,Length(IntToStr(HexInt))-Zid-Wid))-Ord(Chr(Rid));
            DescTmp:=Chr(DescId);
            if DescString='' then
                DescString:=DescTmp
            else
                DescString:=DescString+DescTmp;
        end;
        Result:=DescString;
    Except
        Result:='';
    end;
end;function TMainForm.HexToInt(SourceHex: String): Integer;
Var
    Tmp:String;
    i,Count,MoIn,DescIn,HexNum,N:Integer;
begin
    Try
        i:=0;
        MoIn:=0;
        DescIn:=0;
        Count:=Length(SourceHex);
        For i:=Count downto 1 do
        begin
            Tmp:=Copy(SourceHex,i,1);
            HexNum:=HexWordToInt(Tmp);
            if HexNum<>0 then
            begin
                MoIn:=HexNum*Floor(IntPower(16,Count-i));
                if DescIn=0 then
                    DescIn:=MoIn
                else
                    DescIn:=DescIn+MoIn;
            end;
        end;
        Result:=DescIn;
    Except
        Result:=0;
    end;
end;function TMainForm.HexWordToInt(Source: String): Integer;
begin
    Try
        if UpperCase(Source)='0' then
            Result:=0
        else if UpperCase(Source)='1' then
            Result:=1
        else if UpperCase(Source)='2' then
            Result:=2
        else if UpperCase(Source)='3' then
            Result:=3
        else if UpperCase(Source)='4' then
            Result:=4
        else if UpperCase(Source)='5' then
            Result:=5
        else if UpperCase(Source)='6' then
            Result:=6
        else if UpperCase(Source)='7' then
            Result:=7
        else if UpperCase(Source)='8' then
            Result:=8
        else if UpperCase(Source)='9' then
            Result:=9
        else if UpperCase(Source)='A' then
            Result:=10
        else if UpperCase(Source)='B' then
            Result:=11
        else if UpperCase(Source)='C' then
            Result:=12
        else if UpperCase(Source)='D' then
            Result:=13
        else if UpperCase(Source)='E' then
            Result:=14
        else if UpperCase(Source)='F' then
            Result:=15
    Except
        Result:=17;
    end;
end;