假如我在我的计划有一个重要的密码的地方,我想使它更安全,例如:使“明文”字符串安全无损?
ftp.password := 'mypassword';
大约8年前,我用它来“破解东西”的乐趣,让我找到了我这样的东西很容易通过使用OllyDbg。
我需要知道的是,是否有办法让这件东西安全无虞。我想直接将密码存储到组件中,但是再次不知道它是否会有好处。
假如我在我的计划有一个重要的密码的地方,我想使它更安全,例如:使“明文”字符串安全无损?
ftp.password := 'mypassword';
大约8年前,我用它来“破解东西”的乐趣,让我找到了我这样的东西很容易通过使用OllyDbg。
我需要知道的是,是否有办法让这件东西安全无虞。我想直接将密码存储到组件中,但是再次不知道它是否会有好处。
只是不这样做。如果您想保持密码安全,请勿将其放入程序中。如果程序是交互式的,你可以询问用户。如果没有,您应该为程序设置一些非密码认证。
如果您必须将密码嵌入到程序中,则该规则非常简单 - 绝对不要将该程序授予任何不能执行密码允许的任何操作。
嗯,也许如果我为程序制作一个用户,即使有人确实得到了它,它也会更安全一点,但它们不会走得太远。 –
这里有一种方法 - 它保持它的安全从好奇的人用十六进制查看器,但当然不会在运行时用先进的技术工作:
function GetA: string;
begin
Result := #$109#$121#$122; // 'myp'
end;
function Getb: string;
begin
Result := #97#$115#$115#$119; // 'assw'
end;
function GetC: string;
begin
Result := #$111#$114#$100; // 'ord'
end;
procedure TForm1.Whatever;
begin
ftp.Password := GetA + GetB + GetC + GetD;
end;
正如我所说的,这不是从别人设置安全在代码执行过程中使用调试程序中断,并在内存设置后检查内存中的ftp.password
,但在十六进制查看器中是安全的。尽管如此,我通常会将ftp.password
的设计时间值设置为类似DoyouthinkImthatstupid?
的值。
尽管我完全同意David Schwartz(你不应该直接在程序中嵌入任何密码),但是任何人都可以通过更难找到它。
不是将字符串定义为一个整体,而是可以通过程序构建字符串。这样,字符串作为一个整体永远不会被存储在您的可执行文件中,因此更难以找到。
这是一个合理的答案,好主意。 –
虽然你不应该这样做的答案是正确的,但在实践中有时候现实世界会迫使你交出。在一个或两个实例中,我被迫采用了类似于我使用的方法的一种方法,即编写一个函数,该函数将使用一些数学公式从头开始生成已知的密码 - 例如,英文单词的第一个字母倒数第一个8位数字的PI。当然,这仍然可以被破解,但它会让这项任务变得更加困难,并且会妨碍偶然的浏览器。
当然,如果你真的使用FTP(而不是SFTP),那么你仍然通过网络以纯文本传递密码。最初我会更关心 - 这是一个更明显的攻击媒介。
+1我会在打开调试器之前嗅探网络流量。这很简单。 –
这根本不是密码学可以解决的问题。保护这个值的唯一方法是依靠操作系统提供的用户访问控制。确保文件的权限尽可能限制。 chown user:user file
然后chmod 400 file
。
也许你可以加密字符串,当你读它时解密它?
但即使如此,正如其他人所说,在应用程序内部存储密码并不是一个好主意。
即使您编码或加密了字符串,它也不会对确定的人员安全。
不要存储密码。哈希然后存储密码。 –
@David Heffernan - 如果这些密码需要发送到另一个应用程序/服务(例如连接到FTP服务器),那么这将不起作用。 – crashmstr
@crash ftp不安全 –