密码的保存和设定? (0分)

M

maomicn

Unregistered / Unconfirmed
GUEST, unregistred user!
用DEHPHI开发的应用,要让用户自己设立登录程序的密码,以保证程序不被随便打开,
从而泄露用户机密,请问密码应该怎样保存,保存在什么文件中比较好,并在用户更改
密码时,系统怎样才能实现新密码的存入。谢谢!
 
Y

yhaochuan

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你开发的是桌面程序的话,可以将密码加密后存到注册表里面。
注册表的使用可以看TRegistry这个类的帮助。
加字方法更采用RAS加密,本来我有RAS加密的Pascal代码,但一时
代不到,不过你在google上搜索一下,也应该能够找到。
有谁知道的也可以POST它的链接上来。
如果你开发的是分布式程序的话,那么最好将密码SAVE在服务器端,或数据库里面。
其方法也不会复杂,我就不多说了。
 
M

maomicn

Unregistered / Unconfirmed
GUEST, unregistred user!
yhaochuan,你好,能不能具体一点说明如何在注册表中保存修改密码,当然有相关代码
为例更好。谢谢。是一个桌面程序用的
 
Y

yhaochuan

Unregistered / Unconfirmed
GUEST, unregistred user!
下面演示怎么写和读注册表的内容:
在FORM上放两个EDIT 和两个BUTTON
写注册表内容:
procedure TForm1.Button1Click(Sender: TObject);
var
; Reg: TRegistry;
begin
; Reg := TRegistry.Create;
; try
; ; Reg.RootKey := HKEY_CURRENT_USER;
; ; if Reg.OpenKey('/Software/MyApplicationName', True) then
; ;begin
; ; ; Reg.WriteString('PWD',Edit1.Text);
; ; ; Reg.CloseKey;
; ; end;
; finally
; ; Reg.Free;
; ; inherited;
; end;
end;

读注册表内容:
procedure TForm1.Button2Click(Sender: TObject);
var
; Reg: TRegistry;
; Pwd: String;
begin
; Reg := TRegistry.Create;
; try
; ; Reg.RootKey := HKEY_CURRENT_USER;
; ; if Reg.OpenKey('/Software/MyApplicationName', True) then
; ;begin
; ; ; Pwd := Reg.ReadString('PWD');
; ; ; Reg.CloseKey;
; ; ; edit2.text:= pwd;
; ; end;
; finally
; ; Reg.Free;
; ; inherited;
; end;
end;
更多这有关TRegistryr的内容请看帮助。
不过这种保存密码的方法其实是很差的方法。


因为要考虑到:
即使你保存的是加密过后的密码,但如果用户删掉了注册表相关的内容
的话,这时候程序将怎么做?
又:如果将密码保存在文件中,比如用写入自定义类型文件中,那么用户也有可能
删掉这个文件,这也是一个问题
 
M

maomicn

Unregistered / Unconfirmed
GUEST, unregistred user!
首先谢谢yhaochuan的详细说明,现就yhaochuan提出的问题,大家看有什么意见或解决
办法,当然,如果我有好的办法也会在这里公布。谢谢
 
O

only you

Unregistered / Unconfirmed
GUEST, unregistred user!
有两种方法,第一,写在注册表后,将该键值隐藏,相关方法可搜索一下一些编程网站
第二,如果用文件则使用PE空闲的文件头,在PE文件头的IMAGE_DOS_HEADER节和IMAGE_FILE_HEADER
节之间有一段空白的位置,有足够的空间写入加密后的密码和用户名。这样我们就可以将密码写在
自己的可执行文件里,就不怕用户删除了。
 
C

coolbaby

Unregistered / Unconfirmed
GUEST, unregistred user!
用加密算法加注册表
 
Y

yhaochuan

Unregistered / Unconfirmed
GUEST, unregistred user!
用加密算法将密码写到注册表中会有一个问题我现在详细说明一下。
假设我们将密码写在/HKEY_CURRENT_USER下的/Software/MyApplicationName中
PWD条目中,当程序第一次运行时,是没有这个条目的,(因为这条条目是程序运行后加上去的_
那么当程序没有发现这个条目时,应该做的是提示用户要为程序加个密码,不是吗?
好了,当用户设了一个密码后,程序将密码积存到注册表,程序第二次运行时,就
会知道已经有了预设密码,就可以比较了,好了,问题来了,假设:用户查看注册表,
将PWD条目删除掉,此后运行程序时,程序不是会以为是第一次运行吗?那么这个用户就达到了
非法使用程序的目的,所以说在注册表中存贮密码的方法是有先天的缺陷的(有人说可以将密码放在
注册表比较不引人注目的地方)总比将密码放在“only youPE空闲的文件头”效果差。
 
M

maomicn

Unregistered / Unconfirmed
GUEST, unregistred user!
那将密码放在“only youPE空闲的文件头”具体应该如何操作
 
顶部