我最近一直在处理FTP,我不确定Indy组件的安全性TIdFTP.这就是为什么我创建了一些我希望与您分享的测试,以便您可以对最佳实践及其完成方式提出自己的看法.
首先,我使用Object Inspector在组件中添加了用户名和密码:

并创建了一个很好的简单连接:
procedure TForm1.FormActivate(Sender: TObject);
begin
try
FTP.Connect();
ShowMessage ('Connection success');
except
ShowMessage ('Connection failure');
end;
end;
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,如果您使用像Resource Hacker这样的简单工具,您可以立即看到所有数据:
Host = 'ivstefano.com'
Password = 'testpass'
Username = 'testuser'
Run Code Online (Sandbox Code Playgroud)
然后,我决定通过从OI中删除它并将其插入代码中,就像其他人一样:
FTP.Host:= 'ivstefano.com';
FTP.Username:= 'testuser';
FTP.Password:= 'testpass';
Run Code Online (Sandbox Code Playgroud)
如果有人更聪明,他可以轻松使用像Hex编辑器这样的工具,看看在exe中编译的是什么:

所以我最终做的是使用OTP(One Time Pad Wiki)创建一个加密工具,你可以从这里下载Sample OTP工具:

我用它用关键字'lemon'加密我的密码'testpass'.然后我用ASCII码加密的字符串(#25+#2+#3+#7+#117+#19+#31+#6)和密钥(#108+#101+#109+#111+#110),都是ASCII字符总和,并在我的主ftp连接程序中使用它们再次使用OTP解密它们:
function opt(text, key: String): String;
var i: Integer;
begin
SetLength(Result, length(text));
for i:= 1 to length(text) do
Result[i]:= Char(Byte(text[i]) xor (i + Byte(key[i mod length(key)])));
end; …Run Code Online (Sandbox Code Playgroud) 我有以下问题,我想要复合主键,如:
PRIMARY KEY (`base`, `id`);
Run Code Online (Sandbox Code Playgroud)
当我插入一个base基于前id一个相同的自动递增的id时base
例:
base id
A 1
A 2
B 1
C 1
Run Code Online (Sandbox Code Playgroud)
有没有办法,当我说:
INSERT INTO table(base) VALUES ('A')
插入一个新记录id3,因为这是base'A' 的下一个ID ?
结果表应该是:
base id
A 1
A 2
B 1
C 1
A 3
Run Code Online (Sandbox Code Playgroud)
是否有可能在数据库中完全执行它,因为如果以编程方式完成它可能会导致比赛条件.
编辑
在base目前代表公司,id代表发票号码.每家公司都应该有自动递增的发票编号,但可能会出现两家公司的发票编号相同的情况.使用公司登录的用户应该能够按这些发票号进行排序,过滤和搜索.
我根据http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/windowsfirewall/找到并实现了这段代码.
procedure AddExceptionToFirewall (Caption: String; Executable: String);
var
FirewallMsg: OleVariant;
Application: OleVariant;
CurrentProfile: OleVariant;
begin
FirewallMsg:= CreateOLEObject ('HNetCfg.FwMgr');
CurrentProfile:= FirewallMsg.LocalPolicy.CurrentProfile;
Application:= CreateOLEObject ('HNetCfg.FwAuthorizedApplication');
Application.ProcessImageFileName:= Executable;
Application.Name:= Caption;
Application.Scope:= FW_SCOPE_ALL;
Application.IpVersion:= FW_IP_VERSION_ANY;
Application.Enabled:= True;
CurrentProfile.AuthorizedApplications.Add (Application);
end;
Run Code Online (Sandbox Code Playgroud)
问题是,在Windows 7上,它只将例外添加为公共而非私有,因为您可以在此处看到以红色圈出的情况

当设置为Public时,我的程序在通过FTP连接访问我的主机时遇到问题,从而导致我的程序无用.此问题仅适用于Windows Vista/7; 在XP上,当前配置工作正常.
如果您有任何线索或有用的指示,请分享.
我有以下用例。我有一张发票,上面有行和联系人。我想知道是否应该存在与检查所有信息是否存在(即至少一行,并且联系人是否存在)相关的逻辑?
delphi ×2
delphi-7 ×2
encryption ×1
entity ×1
ftp ×1
security ×1
sql ×1
sql-server ×1
unique ×1