【问题标题】:How can I change an encryption key and still be able to decrypt old data?如何更改加密密钥并仍然能够解密旧数据?
【发布时间】:2011-09-27 15:09:08
【问题描述】:

我需要在 C# 中创建一个对称密钥并使用它来加密一个字符串,我最终会将其存储在数据库中。我会使用 .Net 中的 AES 机制来实现这一点。我会使用相同的密钥来解密加密的数据。

现在我的要求是,如果我有更改密钥的机制。如何确保我可以使用新创建的密钥来解密使用旧密钥或过期密钥加密的字符串?

【问题讨论】:

  • 我认为您应该在删除旧密钥之前使用新密钥重新加密数据
  • 如果我有一种定期(比如一年)更新密钥的机制怎么办?我是否必须添加代码来重新加密可能是大量数据的数据)?
  • 正如@sll 所说 - 在您更改密钥之前,您需要使用旧密钥解密所有数据,使用新密钥重新加密,然后替换数据库中的数据跨度>
  • :-( 我正在寻找类似于在 MS SQL 中使用 Key_Source 和 Identity_Value 的解决方案?
  • 另一种方法是保留旧密钥,任何加密都需要引用它加密的密钥(例如作为外键或通过比较时间戳和到期日期)。这样,当密钥更改时,您只需添加新密钥并将其标记为活动,将旧密钥标记为过期。所有新数据都使用新密钥加密,您可以在需要解密旧数据时引用旧密钥

标签: c# aes rijndaelmanaged


【解决方案1】:

每次密钥更改时,必须解密数据库中的所有内容,然后使用新密钥重新加密。

编辑--

根据您的评论,Key_Source 和 Identity_Value 所做的是创建一个永不更改的密钥,然后加密该密钥并定期更改该外层。我不建议您自己实现,因为很难正确保护该主密钥,如果您正在使用的数据库,则只需使用内置于 MS SQL 的密钥系统。

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 1970-01-01
    • 2010-10-19
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多