如何通过文件来读取密码(200分)

  • 主题发起人 主题发起人 hmwg
  • 开始时间 开始时间
H

hmwg

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一个新手,我在做一个程序,想把密码在用户输入
并且确认保存以后放到文件中,在以后的程序中就不用再
输入了,包括三个部分:用户名(username),口令(password)
部门(equity).现在的问题是如何存取和读取,希望能够给我
一个源程序,对密码加密的最好,谢谢!
 
你自己定义一种格式,用随机文件打开,或者用流也可以,
然后就随便了,
 
方法1:
一个Memo1 //放密码等
三个Edit1、Edit2、Edit3 //输入密码等

procedure Tform1.FormCreate(Sender: TObject);
begin

Memo1.Visible :=false; //不给看。
try
Memo1.Lines.LoadFromFile ('c:/program/data/Ps.DB');
except
Application.Terminate ; //异常将退出
end;

if (Edit1.text=Memo1.Lines.Strings [8] ) and //用户名(username)
(Edit2.text=Memo1.Lines.Strings [9] ) and //口令(password)
(Edit3.text=Memo1.Lines.Strings [10] ) then //口令(password)
begin
//在此写代码
showmessage('密码正确!');
end
else
begin
//在此写代码
showmessage('密码不正确!');
end;

end;

注:
'c:/program/data/Ps.DB'是一个文本文件。
.DB 是为了与数据库文件同名,好混水摸鱼。
第 0 行至第 7 行乱写,412354·#!~~苛~1sdfqtfg
第 8、9、10 行,写信息。
如果再做点技术上的处理,如拆散为几段,用时再连接...想怎么样组合
就怎么样组合。不过要多写十行八行代码呵。
后面还要再写几行,真真假假。

用数据库打开 .db 这个文本文件,笑死你!
用字处理打开 .db 这个“库文件”,一堆乱码,烦死他!


方法2:
专用一个数据库文件pp.db保存密码
三个字段(用户名(username)、口令(password)、部门(equity))

if (Edit1.text=Table1.fieldbyName('用户名').AsString ) and //用户名(username)
(Edit2.text=Table1.fieldbyName('口令').AsString ) and //口令(password)
(Edit3.text=Table1.fieldbyName('部门').AsString ) then //口令(password)
begin
//在此写代码
showmessage('密码正确!');
end
else
begin
//在此写代码
showmessage('密码不正确!');
end;

加密可先把pp.db改名为pp.dll
程序运行时再改为pp.db 。
完成后又改为pp.dll 。


方法3
...

 
给你一个例子。
Memo1的内容其实是任意的,你完全可以自己定义。

function TForm1.LoadFromFile(FileName: string): Boolean;
var Stream: TStream; S: string; L: Integer;
begin
Stream:=TFileStream.Create(FileName, fmOpenRead);
try
Stream.ReadBuffer(L, SizeOf(L));
SetLength(S, L);
if L>Stream.Size-SizeOf(L) then Raise Exception.Create('长度不够!');
Stream.ReadBuffer(S[1], L);
Result:=True;
finally
Stream.Free;
Memo1.Lines.Text:=S;
end;
end;

function TForm1.SaveToFile(FileName: string): Boolean;
var Stream: TStream; S: String; L: Integer;
begin
Stream:=TFileStream.Create(FileName, fmCreate);
S:=Memo1.Lines.Text;
try
L:=Length(S);
Stream.WriteBuffer(L, SizeOf(L));
Stream.WriteBuffer(S[1], L);
Result:=True;
finally
Stream.Free;
end;
end;
 
var
List:Tstrings;
UserName,PassWord,equity:String;
begin
...
// UserName,PassWord,equity赋值
//写
List=TStringlist.Create;
List.Add(UserName);
List.Add(PassWord);
List.Add(equity);
List.SaveToFile('文件名');
//读
List.LoadFromFile('文件名');
UserName:=List.Strings[0];
PassWord:=List.Strings[1];
equity:=List.Strings[2];

List.Destroy;
end;
 
保存在注册表中也可以。
 
同意Chenlili
 
假设Edit1为用户名, Edit2为密码, Edit3为部门

type
Tbm= record
Usename: String[8]; //用户名
Pass: String[10]; // 密码
Equity: ShortString; // 部门
end;

const
C1Key = 12674; // C1 = 52845;
C2Key = 35891; // C2 = 22719;

var
bm: Tbm;
FileHandle: Integer;

function DecryptStr(const S: string; Key: Word): string;
var // 解密
I : Integer;
begin
Result := S;
for I := 1 to Length(S) do
begin
Result := Char(Byte(S) xor (Key shr 8));
Key := (Byte(S) + Key) * C1Key + C2Key;
end;
end;

function EncryptStr(const S: string; Key: Word): string;
var // 加密
I : Integer;
begin
Result := S;
for I := 1 to Length(S) do
begin
Result := Char(Byte(S) xor (Key shr 8));
Key := (Byte(Result) + Key) * C1Key + C2Key;
end;
end;

procedure TForm1.SaveData; // 保存到文件
begin
FileHandle:=FileCreate('./Data.dat');
with bm do begin
Usename:=Edit1.Text ;
Pass:=EncryptStr(edit2.text,123);
Equity:=edit3.text;
end;
FileWrite(FileHandle,bm,Sizeof(bm));
FileClose(fileHandle);
end;

function TForm1.LoadData ; // 从文件载入
begin
FileHandle:=FileOpen('./Data.dat',fmOpenread or fmShareDenyNone);
FileRead(FileHandle,bm,Sizeof(bm));
with Bm do begin
Edit1.Text:=Usename ;
edit2.Text:=DecryptStr(Pass,123);
edit3.Text:=Equity;
end;
fileclose(fileHandle);
end;
 
多人接受答案了。
 
可以将字符串加密后,再放入注册表,这样安全些。
 
后退
顶部