用注册表对delphi程序加密

小马哥o的老巢

小马哥o的老巢

2016-02-19 13:19

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐用注册表对delphi程序加密,无聊中的都看过来。
本加密方法分三部分:

    1. 根据对注册表的搜索结果判定设置对话框的内容。

    2. 若初次使用,则设新密码;若是已经设置密码,则进行验证。

    3. 一个密码变换小程序(比原来的复杂得多)。当然,如果需要修改密码的功能,只要将设置密码部分改动一下即可。

    一、程序启动时,通过搜索注册表,判断是否已有密码,来确定窗口的显示内容。不过事先应有以下的声明然后才能使用:

    在user中加入TRegistry,在var声明中加入以下几个窗体变量:

     TheReg: TRegistry;

     KeyName,ValueStr,tempStr:String;

    procedure TfrmPass.FormShow(Sender: TObject);

    begin

     TheReg := TRegistry.Create;

     try TheReg.RootKey := HKEY—LOCAL—MACHINE;

    KeyName := ′SOFTWAREMypassword′;

    //有该键则打开,没有则创建

    if TheReg.OpenKey(KeyName, True) then begin

    tempStr:=ExtractFileName(Application.ExeName); //读取密码

     ValueStr:=TheReg.ReadString(tempStr);

     //密码不为空则修改窗体为验证密码

     if ValueStr′′ then begin

     edit2.Visible:=false; frmPass.Caption:=′验证密码′;

     edit1.SetFocus; OK.Caption:=′确定′; end

    //密码为空则修改窗体为设置密码对话框

    else begin

    showmessage(′第一次使用请设置密码!′);

     edit2.Visible:=true; frmPass.Caption:=′请设置新密码′;

     edit1.SetFocus; OK.Caption:=′设置′;

     end; TheReg.CloseKey; end;

    finally TheReg.Free; end; end;

    二、按钮的响应代码:包括新设密码和验证密码。

    procedure TfrmPass.OKClick(Sender: TObject);

    begin

     //根据Edit2的显示与否判断已有密码,进行验证

     if edit2.Visible=false then begin

    if pass(edit1.text)=ValueStr then begin

     showmessage(′密码正确!′); end

    else begin

     showmessage(′密码不正确!无权操作!′);

     halt; end; end //无密码,设置新密码

     else begin

    if edit1.text=edit2.text then begin

     TheReg := TRegistry.Create;

     TheReg.RootKey := HKEY—LOCAL—MACHINE;

     KeyName := ′SOFTWAREMypassword′;

     if TheReg.OpenKey(KeyName, True) then

     TheReg.WriteString(tempStr,pass(edit1.text));

     TheReg.CloseKey; end

    else begin

     showmessage(′再次键入的密码不一致,请重输!′);

     edit1.text:=′′; edit2.text:=′′;

     edit1.SetFocus; end; //进行下一步操作...

     end; end;

    三、密码变换程序:注意要预先定义。

    这个变换小程序在笔者看来还不算很复杂,只进行了两次变换,不过,想要破译也是得费点劲。读者还可以采用其他的数学函数进行更为复杂的变换。

    function pass(pstr:string):string;

    var str,str1:string;

    i,j:integer;

    begin

     str:=pstr;

     for i:=1 to length(str) do begin

    //进行第一次变换

     j:=(i*i*i mod (i+20))+(i*i mod (i+10))+i*2+1;

     str1:=str1+chr(ord(str[i])+j); //第二次变换

     j:=(i*i*i mod (i+10))+(i*i mod (i+20))+i*2+1;

     str1:=str1+chr(ord(str[i])+j); end;

     pass:=str1;

    end;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

用注册表对delphi程序加密

编程语言 网络编程
用注册表对delphi程序加密

DELPHI和注册表

Delphi
DELPHI和注册表

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi编程访问注册表

Delphi
Delphi编程访问注册表

用Asp修改注册表

ASP
用Asp修改注册表

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用PHP读注册表

Web开发
用PHP读注册表

用VC6编写注册表管理程序

编程语言 网络编程
用VC6编写注册表管理程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

对“网页内容查询控制”主题所得(下载):

对“网页内容查询控制”主题所得(下载):

JSP+JavaBean+Servlet工作原理实例讲解

JSP+JavaBean+Servlet工作原理实例讲解
下拉加载更多内容 ↓