我有一个程序需要在每个用户的计算机上保存一些用户唯一的信息(我在第一次使用时查询用户)。在我的程序初稿中,我只是将该信息保存在文本文件中(在程序文件夹的子文件夹中)。但它是开放文本,我想改变它,以便它不那么容易阅读。
在阅读MSDN中的一些文章后,我认为使用File.Encrypt和File.Decrypt可以完成这项工作。我不想散列文本,因为我需要检索它并在我的程序中以其开放形式使用它。 (你可以猜到我以前没有使用加密 - 这也是我不急于使用更复杂的东西的原因 - 但如果它是我唯一的选择,它会这样做)。
这是我的代码,它不起作用。我很感激有关我做错的任何反馈......
if (File.Exists(@"subfolder\a.txt"))
{
File.Decrypt(@"subfolder\a.txt");
string unique = File.ReadAllText(@"subfolder\a.txt");
File.Encrypt(@"subfolder\a.txt");
}
else
{
string unique =
Microsoft.VisualBasic.Interaction.InputBox("Please enter your
unique text ...", "Enter your unique text", "");
File.WriteAllText(@"creds\u.txt", username);
File.Encrypt(@"creds\u.txt");
}
感谢。
相对新手......
答案 0 :(得分:0)
好的,首先想一想你的方法论。
If (the file exists) {
Decrypt the file
Read the contents
Encrypt it again
} else {
Enter text
Save as a different file name than above
Encrypt the file
}
解密文件时,您尝试解密磁盘上的文件,使其保持未加密状态。 然后,您阅读内容,并再次加密。
此方法假定您正在将文件解密到磁盘,然后读取内容,但这不是正确的用法。
https://support.microsoft.com/en-us/kb/301070
您提到您不想散列数据,但假设您将使用合适的复杂salt和密钥,您可以将它们存储在程序中,以便在经过验证的散列算法中使用。
有人可能会通过反编译IL代码来检索这些内容,但它仍然比在磁盘上解密更安全。
阅读以下文章,其中将介绍您可能会发现有用的安全哈希的几个因素。 https://crackstation.net/hashing-security.htm
您可能对File.Encrypt
提出的部分问题是,它在Windows平台上并不普遍受到支持,而在我看来,它几乎无法使用。
从根本上说,如果您打算解密数据以便在您的程序中使用,我怀疑您的主要问题是有人破解网络并获取公司机密信息,更多的是让人们不会弄乱配置数据或类似数据。 使用密码存储在代码中的哈希值很好,但不能满足企业级应用程序中任何严重的安全问题。
本文将引导您完成整个过程。如果您愿意,可以将密码作为字符串存储在程序中,而不是要求输入密码,但如果您为程序添加了登录提示,则可以使用示例代码几乎不变。