[ConnectString]
UserName='
PassWord=
DataBaseName=
ServerName=我的一个INI文件被我加密后, 使用 sTmpStr := ReadString('ConnectString', 'UserName', '');这样只能获取'这个字符,而这个获取不到"". 郁闷!
UserName='
PassWord=
DataBaseName=
ServerName=我的一个INI文件被我加密后, 使用 sTmpStr := ReadString('ConnectString', 'UserName', '');这样只能获取'这个字符,而这个获取不到"". 郁闷!
const
cStr = 'Temp';
var
sStr, sTmpStr, dTmpStr: String;
I, J, iLen, iKey: Integer;
begin
sStr := Edit3.Text;
iLen := length(sStr);
iKey := length(cStr);
J := 1;
for I := 1 to iLen do
begin
sTmpStr := sTmpStr + Char(ord(sStr[I]) xor ord(cStr[J]));
if J = iKey then
begin
J := 1;
Continue;
end;
Inc(J);
end;
Edit1.Text := sTmpStr;
dTmpStr := '';
iLen := length(sTmpStr);
J := 1;
for I := 1 to iLen do
begin
dTmpStr := dTmpStr + Char(ord(sTmpStr[I]) xor ord(cStr[J]));
if J = iKey then
begin
J := 1;
Continue;
end;
Inc(J);
end;
Edit2.Text := dTmpStr;
end;
我的简单加密算法是这样的!
拿个是输入"sa"后保存到Ini文件.
但在INI文件读不完整数据出来. 但我的
加密解密测试是可以的.
在我从INI文件读出来之后, 再进行解密.
可是我跟踪到是在读INI文件的sTmpStr := ReadString('ConnectString', 'UserName', '');
出问题了! 在加密的时候已经正确的写入了数据.
但在读的时候就读出不完整的数据了! 郁闷啊.
UserName='
PassWord=
DataBaseName=
ServerName=
你是不是连userName 都加密了,看了半天没看懂
sTmpStr := ReadString('ConnectString', 'UserName', '');
你的本来就是' 读出来肯定也是' 把'用你自己的解密算法算出来 就是sa了。
把你的
Button2Click写成一个函数吧。这没什么问题啊。
var
s: string;
inifile: TIniFile;
strLocalName: string;
begin
//s := extractfilepath(application.exename); UserName='
s:='c:\1.ini';
inifile:=TIniFile.Create(s);
strLocalName:=Encode(inifile.readstring('ConnectString','UserName',''));
edit2.text:=strLocalName;
inifile.free;
end;procedure TForm1.Button3Click(Sender: TObject);
var
s: string;
inifile: TIniFile;
strLocalName: string;
begin
//s := extractfilepath(application.exename); UserName='
s:='c:\1.ini';
inifile:=TIniFile.Create(s);
inifile.writestring('ConnectString','UserName',''''+Encode(Edit1.Text)+'''');
edit1.text:=strLocalName;
inifile.free;
end;function TForm1.Encode(Str: string): string;
const
cStr = 'Temp';
var
s,sStr: string;
inifile: TIniFile;
strLocalName: string;
sTmpStr, dTmpStr: String;
I, J, iLen, iKey: Integer;
begin
sStr := Str;
iLen := length(sStr);
iKey := length(cStr);
J := 1;
for I := 1 to iLen do
begin
sTmpStr := sTmpStr + Char(ord(sStr[I]) xor ord(cStr[J]));
if J = iKey then
begin
J := 1;
Continue;
end;
Inc(J);
end;
Result:=sTmpStr;
Edit1.Text := sTmpStr; //加密后的
end;
你试一下加密后存到INI文件,然后再从INI文件
读取,再解密看你能得到正确的‘sa'吗? 谢谢!
可是存进INI文件之后,就是ReadString读少了一个字符。
在INI文件里面也确实存在的。
inifile.writestring('ConnectString','UserName',''''+Encode(Edit1.Text)+'''');
写的时候用分号括起来
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,inifiles;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
function Encode(str : string): string;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
inifile: TIniFile;
strLocalName: string;
begin
//s := extractfilepath(application.exename); UserName='
s:='c:\1.ini';
inifile:=TIniFile.Create(s);
strLocalName:=Encode(inifile.readstring('ConnectString','UserName',''));
edit2.text:=strLocalName;
inifile.free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
inifile: TIniFile;
strLocalName: string;
begin
//s := extractfilepath(application.exename); UserName='
s:='c:\1.ini';
inifile:=TIniFile.Create(s);
inifile.writestring('ConnectString','UserName',''''+Encode(Edit1.Text)+'''');
inifile.free;
end;function TForm1.Encode(Str: string): string;
const
cStr = 'Temp';
var
s,sStr: string;
inifile: TIniFile;
strLocalName: string;
sTmpStr, dTmpStr: String;
I, J, iLen, iKey: Integer;
begin
sStr := Str;
iLen := length(sStr);
iKey := length(cStr);
J := 1;
for I := 1 to iLen do
begin
sTmpStr := sTmpStr + Char(ord(sStr[I]) xor ord(cStr[J]));
if J = iKey then
begin
J := 1;
Continue;
end;
Inc(J);
end;
Result:=sTmpStr;
// Edit1.Text := sTmpStr; //加密后的
end;
end.
加密的密文最好加上 '...' ,引号引起来。