Mis*_*ssy 8 encryption cryptography
我已经看过这些例子,但我希望其他程序员可以运行它.对于我的窗体表单应用程序中的加密,我生成两个随机数并将它们保存在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**))
Run Code Online (Sandbox Code Playgroud)
然后我使用密钥使用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.
Run Code Online (Sandbox Code Playgroud)
为了执行解密,需要用于加密文件的两个密钥.通过需要两个经过身份验证的用户的软件可以解密.钥匙每天都在变化.数据和数据库在物理上足够安全.密钥表与证书位于不同的数据库中.
问题是:这是否足以保证数据不被解密,如果现在,为什么不,以及您可能建议的更改?
这里的问题是,任何能够获得该文件的人都很有可能获得数据库中的数据(包括密钥).一旦数据被泄露,更改密钥的频率并不重要,因为攻击者将使用与其匹配的密钥加密文件的副本.
此问题的常见解决方案是使用外部硬件安全模块或TPM之类的东西.
这是一个非常有用且相关的帖子,列举了几个选项.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |