M
marknew
Unregistered / Unconfirmed
GUEST, unregistred user!
1。
连接串是
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=qjmis;Data Source=MSC018
也就是把以上的内容加密后写入注册表,再解密读出。
下面的加解密算法是没问题的,我已经测试过,这个串不写入注册表就没问题。
我怀疑是写入注册表时很多怪符号(加密后生成的)出现了问题,
写入ini文件只能读出加密后的一部分,请大家帮我分析一下问题的所在。200分!
以前是我的读写过程
Type IniOpType=(OpRead,OpWrite);
function ReadWriteDataReg(var DefConnStr:string;OpType:IniOpType=OpRead):boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('/Software/'+CPubSoftName, True) then
begin
try
if OpType=OpRead then
begin
DefConnStr:=ReadString('ConnectionString');
if DefConnStr<>'' then
DefConnStr:=decrypt(DefConnStr,10,50,100);
end
else
begin
if DefConnStr<>'' then
begin
DefConnStr:=Encrypt(DefConnStr,10,50,100);
Reg.WriteString('ConnectionString',DefConnStr);
end;
end;
result:=true;
except
msgbox('读写注册表时出错!',48,CPubSystemHint);
end;
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
这是我的加密解密算法
function Encrypt(const InString:string
StartKey,MultKey,AddKey:int64): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));
StartKey := (Byte(Result) + StartKey) * MultKey + AddKey;
end;
end;
function Decrypt(const InString:string
StartKey,MultKey,AddKey:Integer): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));
StartKey := (Byte(InString) + StartKey) * MultKey + AddKey;
end;
end;
2。请问是写Active Library/Com+的属性如何赋值?一定得用带传址参数的函数吗?
(有人问过,但没结果)
连接串是
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=qjmis;Data Source=MSC018
也就是把以上的内容加密后写入注册表,再解密读出。
下面的加解密算法是没问题的,我已经测试过,这个串不写入注册表就没问题。
我怀疑是写入注册表时很多怪符号(加密后生成的)出现了问题,
写入ini文件只能读出加密后的一部分,请大家帮我分析一下问题的所在。200分!
以前是我的读写过程
Type IniOpType=(OpRead,OpWrite);
function ReadWriteDataReg(var DefConnStr:string;OpType:IniOpType=OpRead):boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('/Software/'+CPubSoftName, True) then
begin
try
if OpType=OpRead then
begin
DefConnStr:=ReadString('ConnectionString');
if DefConnStr<>'' then
DefConnStr:=decrypt(DefConnStr,10,50,100);
end
else
begin
if DefConnStr<>'' then
begin
DefConnStr:=Encrypt(DefConnStr,10,50,100);
Reg.WriteString('ConnectionString',DefConnStr);
end;
end;
result:=true;
except
msgbox('读写注册表时出错!',48,CPubSystemHint);
end;
end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
这是我的加密解密算法
function Encrypt(const InString:string
StartKey,MultKey,AddKey:int64): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));
StartKey := (Byte(Result) + StartKey) * MultKey + AddKey;
end;
end;
function Decrypt(const InString:string
StartKey,MultKey,AddKey:Integer): string;
var
I : Byte;
begin
Result := '';
for I := 1 to Length(InString) do
begin
Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));
StartKey := (Byte(InString) + StartKey) * MultKey + AddKey;
end;
end;
2。请问是写Active Library/Com+的属性如何赋值?一定得用带传址参数的函数吗?
(有人问过,但没结果)