-2

脚本用于每天通过用户交互发送电子邮件(仅限 Gmail)。我想将他们的电子邮件以纯文本文件的形式存储在硬盘中。什么是正确的方法?

  • 我知道一种方法是要求用户输入密码以保护电子邮件密码,但这种方法毫无意义,因为用户每次发送电子邮件时都应输入新密码,所以我宁愿询问他们的电子邮件密码代替。

  • 另一种方法是加密密码并使用与用户特定信息组合的密钥,例如计算机名+用户名+系统+...,并使用相同的密钥来解密加密的密码。问题在于,我使用的是易于反编译的Autoit,因此当潜在的攻击者获得加密密码时,他们理论上可以知道加密密钥,所以我使用谁的许多 uniq 信息来加密密码并不重要,他们无论如何都能得到它。

  • 另一种方法是将 OAuth 用于 gmail,因此用户根本不需要输入密码,但我不能这样做。

有任何想法吗 ?

4

3 回答 3

3

由于您在 Windows 上编程,我建议您查看 Windows API 来为您完成加密工作。你可以相信它们比你自己发明的更好,假设你不愿意做出不同的假设(例如:TPM)。

如果您想针对该操作系统,在 Win8 上现在有一个 PasswordVault 类。在 <=Win7 上,有 DPAPI 和凭据管理器

这些都不是 GMail 特有的……这只是一般的“在 Windows 上安全地存储东西”之类的建议。您应该追求更好的特定于 gmail 的方式(例如:服务特定凭证)。但即使您这样做了,这也是将其存储在客户端操作系统上的更好方法。

于 2012-09-12T19:44:34.227 回答
2

正如 Eric 所提到的,如果您使用的是 Windows,DPAPI 是可行的方法。http://msdn.microsoft.com/en-us/library/ms995355.aspx 函数 CryptProtectData() 使用该特定用户的 Windows 登录信息来加密数据,以便系统上的其他用户无法解密纯文本你存储的。

于 2012-09-14T14:59:28.307 回答
-1

AutoIt 有 _Crypt...() 函数可用于此。您可以散列@computername 或@username,并将散列用作_Crypt_DeriveKey() 函数的密钥,以本地化其密码的使用。然后使用密钥将密码字符串作为数据传递给 _Crypt_EncryptData()。将加密密钥存储在纯文本文件中。

当您调用它时,读取文件,使用_Crypt_DeriveKey() 再次创建密钥,然后使用_Crypt_DecryptData() 对其进行解密。后一个函数的输出应该是您的密码。

Crypt.au3 利用 WinAPI 函数进行加密。

于 2012-09-20T19:13:04.233 回答