c# - 使用file.encrypt在本地保存一些持久性信息?

时间:2016-10-06 21:45:54

标签: c# encryption

我有一个程序需要在每个用户的计算机上保存一些用户唯一的信息(我在第一次使用时查询用户)。在我的程序初稿中,我只是将该信息保存在文本文件中(在程序文件夹的子文件夹中)。但它是开放文本,我想改变它,以便它不那么容易阅读。

在阅读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");
        }

感谢。

相对新手......

1 个答案:

答案 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平台上并不普遍受到支持,而在我看来,它几乎无法使用。

从根本上说,如果您打算解密数据以便在您的程序中使用,我怀疑您的主要问题是有人破解网络并获取公司机密信息,更多的是让人们不会弄乱配置数据或类似数据。 使用密码存储在代码中的哈希值很好,但不能满足企业级应用程序中任何严重的安全问题。

本文将引导您完成整个过程。如果您愿意,可以将密码作为字符串存储在程序中,而不是要求输入密码,但如果您为程序添加了登录提示,则可以使用示例代码几乎不变。

https://msdn.microsoft.com/en-us/library/ms172831.aspx