小编ziG*_*iGi的帖子

Delphi 7 TIdFTP FTP安全(密码保护)

我最近一直在处理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)

delphi security encryption ftp delphi-7

9
推荐指数
2
解决办法
2707
查看次数

具有第二场自动增量的两场SQL Server唯一复合键

我有以下问题,我想要复合主键,如:

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代表发票号码.每家公司都应该有自动递增的发票编号,但可能会出现两家公司的发票编号相同的情况.使用公司登录的用户应该能够按这些发票号进行排序,过滤和搜索.

sql sql-server unique auto-increment

6
推荐指数
1
解决办法
4175
查看次数

Delphi 7 Windows Vista/7防火墙例外网络位置

我根据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 windows-firewall delphi-7 windows-vista

5
推荐指数
1
解决办法
3532
查看次数

DDD:我应该将有关两个实体的逻辑放在哪里?

我有以下用例。我有一张发票,上面有行和联系人。我想知道是否应该存在与检查所有信息是否存在(即至少一行,并且联系人是否存在)相关的逻辑?

entity domain-driven-design

5
推荐指数
1
解决办法
900
查看次数