如何将内存中ADOConnection1.ConnectionString值加密(200分)

  • 主题发起人 主题发起人 lunni
  • 开始时间 开始时间
L

lunni

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOConnection1.ConnectionString的值在内存中是明文的可以用winhex等内存工具查看到<br>如何能加密啊。
 
先提供一个字符串加解密的函数:<br>unit Crypt32;<br><br>interface<br><br>const<br>&nbsp; StartKey = 981; &nbsp; <br>&nbsp; MultKey &nbsp;= 12674; <br>&nbsp; AddKey &nbsp;= 35891;<br><br>function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;<br>function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;<br><br>implementation<br><br>{function Encrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;<br>var<br>&nbsp; I : Byte;<br>begin<br>&nbsp; Result := '';<br>&nbsp; for I := 1 to Length(InString) do<br>&nbsp; begin<br>&nbsp; &nbsp; Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));<br>&nbsp; &nbsp; StartKey := (Byte(Result) + StartKey) * MultKey + AddKey;<br>&nbsp; end;<br>end;<br><br>function Decrypt(const InString:string; StartKey,MultKey,AddKey:Integer): string;<br>var<br>&nbsp; I : Byte;<br>begin<br>&nbsp; Result := '';<br>&nbsp; for I := 1 to Length(InString) do<br>&nbsp; begin<br>&nbsp; &nbsp; Result := Result + CHAR(Byte(InString) xor (StartKey shr 8));<br>&nbsp; &nbsp; StartKey := (Byte(InString) + StartKey) * MultKey + AddKey;<br>&nbsp; end;<br>end;<br><br>end.<br>1. 编一个简单的加密程序,把你的 ConnectionString 加密。<br>2. 在你的应用程序中,在 ADOConnection1 的 BeforeConnect 事件中加入:<br><br>procedure TFormMain.ADOConnection1BeforeConnect(Sender: TObject);<br>begin<br>&nbsp; ADOConnection1.ConnectionString:=<br>&nbsp; &nbsp; Decrypt('xxxxxxxxxxxxxxxxxxxxxxxxxxx',StartKey,MultKey,AddKey);<br>end;<br>其中的 xxxxxxxxxxxxxxxxxxxxxxxxxxx 就是你加密后的 ConnectionString
 
这样有作用吗?<br>ado在connect的时候和数据库通讯时还是明文的呀
 
楼主要的是如何避免“winhex等内存工具查看到”ConnectionString,不是如何避免通信包被截取,跟“数据库通讯时还是明文”无关。
 
感谢二位
 
后退
顶部