在方法中将密码存储为本地常量的安全含义?

时间:2014-10-09 12:38:49

标签: windows security delphi pascal

我想就最常见的安全反模式问题进行自我教育。

假设,以下列方式存储密码的安全风险是什么:

interface

type
  TFoo = class
   procedure DoSomething;
  end;

Implementation

procedure TFoo.DoSomething;
 const
   Password = 'Something';
begin 

end;

我知道正确的方法是使用散列算法来散列密码并将该值保存在外部文件中,但是我真的对如何将示例中的密码暴露给恶意第三方感兴趣。

2 个答案:

答案 0 :(得分:3)

通过检查可执行文件中的数据,可以看到密码。例如。使用十六进制编辑器甚至记事本。

答案 1 :(得分:0)

  

我想教育自己......

除了egur's correct answer之外,还要回答未提出的问题,即任何密码存储在源代码解决方案中是否会这样做:

如前所述,常量字符串在字面上显示在可执行文件中。

备选方案1:

const
  PW0 = 'pas';
  PW1 = 'swo';
  PW2 = 'rd';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;

结果:'密码'在可执行文件中。

备选方案2:

const
  PW2 = 'rd';
  PW1 = 'swo';
  PW0 = 'pas';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;

结果:'密码'在可执行文件中。

备选方案3:

var
  PW2: String = 'rd';
  PW1: String = 'swo';
  PW0: String = 'pas';
  PassWord: String;

initialization
  PassWord := PW0 + PW1 + PW2;

结果:'',' swo'和' pas'在可执行文件中。

再尝试一下自己。在记事本中打开可执行文件并亲自查看。

此外,不用说,上述做法不是建议,只是对问题的补充价值。