在C中为运行时安全地存储密码

时间:2014-07-18 10:09:53

标签: c email client password-protection password-encryption

我目前正在C写一个邮件客户端。但我有一个关于存储密码的问题。

只要程序运行,我只想存储它。 密码是"字符串"我可以将它存储在一个char数组中,在程序结束前不久会被覆盖。但这相对不安全。

如何在程序运行期间安全地存储密码?

1 个答案:

答案 0 :(得分:2)

你完全避免以明文形式保存密码。

如果 保留密码(例如,您需要定期将其发送到服务器),最好将其保存为加密形式。哪种加密形式由您决定。这使得对程序进行内存分析的人更难以查看密码。 (更难,不是不可能;如果你必须将密码发送到服务器,并且某人有物理访问机器进行内存分析,你所能做的就是让它变得困难。)

使用它时,你会这样做:

  • 分配临时数组
  • 解密到数组
  • 使用阵列(例如,将密码发送到服务器)
  • 覆盖数组
  • 释放阵列

如果您希望 真的 偏执,那么在覆盖数组时,请按顺序执行多个项目(这只是一个示例):

  • 全部为零
  • 所有
  • 选择随机字节值
  • 使用该字节值填充数组
  • 再次使用值位移一次
  • 再次使用值位移再次填充
  • 再次使用第三次移位值
  • 再次使用第四次取值值
  • 再次使用第五次取值值
  • 再次使用第六次移位值
  • 再次使用第七次取值值
  • 所有
  • 全部为零

......显然,一些研究人员有时能够通过对RAM中存储器单元的取证分析来检索先前数据的回声。但我认为这属于偏执狂的范畴。 (但这样做很便宜。;-))