1

我在 Windows 7 操作系统上有一个小系统,它由两个应用程序(C 和 C# 应用程序)和一个实际上是文本或二进制文件的数据库组成。

C 应用程序只能从数据库中读取,C# 应用程序可以读写。我想保护这个数据库文件免受外部影响。

我倾向于使用公钥加密方法,例如 RSA。您能否提供更好的一种方法或更好的特定解决方案。我建议我需要一些用于 C 和 C# 语言的开源、商业友好的许可库(如 OpenSSL)。但是我自己的实现也可能是一个不错的选择。

UPD:我可以更改两个应用程序代码,我想加密整个文件。

4

1 回答 1

1

你应该使用一些标准的对称加密。MS 为这个主题提供了一篇很好的文章。http://support.microsoft.com/kb/307010/en-us。编写自己的加密方法通常会导致不安全和错误的算法。

使用密码和盐的初始化示例:

var enc = new RijndaelManaged();
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(pw, Encoding.ASCII.GetBytes(salt));
enc.Key = key.GetBytes(encryption.KeySize / 8);
enc.IV = key.GetBytes(encryption.BlockSize / 8);
enc.Padding = PaddingMode.PKCS7;

在您的情况下,您遇到了创建和存储密码和盐的问题。salt 可以与文件一起存储(例如,前 16 个字节,或者您可以选择文件名),并且不能被保护。密码由用户输入。

如果数据绑定到 Windows 帐户,您可能更喜欢使用数据保护 API,因为用户不需要执行密码输入。数据保护 API提供了一个很好的示例

您可能对SO 讨论的第一个答案感兴趣

于 2014-02-25T09:05:02.283 回答