脚本用于每天通过用户互动发送电子邮件(仅限Gmail)。我想将他们的电子邮件存储在纯文本文件中的硬盘中。做正确的方法是什么?
我知道一种方法是要求用户输入密码来保护电子邮件密码,但这种方法毫无意义,因为用户每次发送电子邮件时都应输入新密码,所以我而是询问他们的电子邮件密码。
另一种方法是加密密码并使用具有特定信息组合的密钥,例如计算机名+用户名+系统+ ...并使用相同的密钥来解密加密密码。这个问题,我使用Autoit很容易反编译,所以当一个潜在的攻击者获得加密密码时,他们理论上可以知道加密密钥,所以无论多少人都不知道我用来加密密码的信息,他们无论如何都可以得到它。
另一种方法是将OAuth用于gmail,因此用户根本不需要输入密码,但我无法做到。
有什么想法吗?
答案 0 :(得分:3)
由于您是在Windows上编程,我建议您查看Windows API以便为您执行加密操作。你可以相信他们比你自己可能发明的更好,假设你不愿意做出不同的假设(例如:TPM)。
如果要定位该操作系统,在Win8上现在有一个PasswordVault类。 在< = Win7上,有DPAPI和凭证管理器
这些都不是GMail特有的......这只是通用的“在Windows上安全地存储东西”的建议。你应该追求更好的gmail特定方式(例如:服务特定凭证)。但即使你这样做,这也是将它存储在客户端操作系统上的更好方法。
答案 1 :(得分:2)
正如Eric所说,如果你使用Windows,DPAPI就是你的选择。 http://msdn.microsoft.com/en-us/library/ms995355.aspx CryptProtectData()函数使用该特定用户的Windows登录信息来加密数据,以便系统上的其他用户不能对您存储的纯文本进行解密。
答案 2 :(得分:-1)
AutoIt具有_Crypt ...()函数用于此目的。您可以散列@computername或@username,并使用散列作为_Crypt_DeriveKey()函数的键来本地化其密码用法。然后使用密钥传递到_Crypt_EncryptData(),将密码字符串作为数据。将加密密钥存储在纯文本文件中。
当你去回调它时,读取文件,用_Crypt_DeriveKey()再次创建密钥,然后用_Crypt_DecryptData()解密它。后一个函数的输出应该是您的密码。
Crypt.au3利用WinAPI函数进行加密。