我想加密一些机密信息并将其保存到数据库中,然后再解密。
我已经很好地完成了所有工作,并且正在保护和保留Aws S3和KMS上的密钥。
这会让我无限期地解密数据还是我必须考虑什么?
ConfigureServices的代码段-startup.cs
services.AddSingleton<IAmazonS3>(new AmazonS3Client(RegionEndpoint.EUWest2));
services.AddSingleton<IAmazonKeyManagementService>(new AmazonKeyManagementServiceClient(RegionEndpoint.EUWest2));
services.AddDataProtection()
.ProtectKeysWithAwsKms(Configuration.GetSection("KmsProtection"))
.PersistKeysToAwsS3(Configuration.GetSection("S3Persistence"));
var cipherOptions = Configuration.GetSection("CipherOptions");
services.Configure<CipherOptions>(cipherOptions);
services.AddScoped(typeof(ICipherService), typeof(CipherService));
CipherService.cs
public class CipherService : ICipherService
{
private readonly IDataProtectionProvider dataProtectionProvider;
private readonly string purpose;
public CipherService(IDataProtectionProvider dataProtectionProvider, IOptions<CipherOptions> options)
{
this.dataProtectionProvider = dataProtectionProvider;
this.purpose = options.Value.Purpose;
}
public string Encrypt(string input)
{
var protector = dataProtectionProvider.CreateProtector(purpose);
return protector.Protect(input);
}
public string Decrypt(string cipherText)
{
var protector = dataProtectionProvider.CreateProtector(purpose);
return protector.Unprotect(cipherText);
}
}
答案 0 :(得分:0)
几乎听起来就像您在询问加密数据是否有某种时间限制(?)。如果是这样:不,没有。
只要您有权访问加密的数据以及用于解密的密钥,那么您就应该能够解密它,并可以随时随地读取它。是的,无限期地。
请注意,是否将加密数据及其密钥存储在同一位置尚不清楚。如果是这样,那可能是个坏主意。如果加密数据的重点是确保数据的安全性,那么将密钥紧挨在旁边就没有任何意义。那么您最好将其存储为纯文本格式。
简而言之,只要您的加密足够好,就可以将数据存储在任意位置;最重要的是,您可以在需要时自己访问它。
对于您的密钥,您可能应该将其存储在至少两个不同的位置(以防万一,避免冗余-否则,您的数据将永远丢失!),并确保两者都是安全且不可访问的给其他人。
答案 1 :(得分:0)
我问了类似的问题here。 过期的密钥将始终能够取消保护数据,因此您应该没事。不确定为什么会在默认的90天之前重新创建密钥。
答案 2 :(得分:0)