【发布时间】:2018-03-14 12:23:06
【问题描述】:
我已经看过这些示例,但我希望其他程序员也能运行它。对于我的窗体应用程序中的加密,我生成了两个随机数并将它们保存在 SQL Server 表中,如下所示:
OPEN SYMMETRIC KEY SymmetricKeyName DECRYPTION BY CERTIFICATE CertificateName;
insert into keyfile(encrypted_key1, encrypted_key2) values
(EncryptByKey(Key_GUID('SymmetricKeyName'), **Key1**),
EncryptByKey(Key_GUID('SymmetricKeyName'), **Key2**))
然后我使用密钥使用 AES-256 加密文件,如下所示:
var key = new Rfc2898DeriveBytes(**Key1, Key2**, 1000);
RijndaelManaged AES = new RijndaelManaged();
AES.KeySize = 256;
AES.BlockSize = 128;
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Padding = PaddingMode.Zeros;
AES.Mode = CipherMode.CBC;
using (var output = File.Create(outputFile))
{
using (var crypto = new CryptoStream(output, AES.CreateEncryptor(), CryptoStreamMode.Write))
{
using (var input = File.OpenRead(inputFile))
{
input.CopyTo(crypto);
}
}
}
etc.
为了执行解密,需要用于加密文件的两个密钥。可以通过需要两个经过身份验证的用户的软件进行解密。钥匙每天都在变化。数据和数据库在物理上是足够安全的。密钥表位于与证书不同的数据库中。
问题是:这是否足以保护数据以防止被轻易解密,如果现在,为什么不这样做?您可能会建议哪些更改?
【问题讨论】: