RijndaelManaged加密替代Enterprise Library

6

我有一个关于加密的问题:在我的Web应用程序中,我使用了Enterprise Library 5.0,其中有一个加密块。在他们提供的配置工具中,我注册了一个块并生成了一个密钥。这基本上会在Web.config文件中添加几行代码,以便稍后在Web应用程序中执行以下操作:

Cryptographer.EncryptSymmetric("RijndaelManaged", text);
Cryptographer.DecryptSymmetric("RijndaelManaged", text);

这将自动进行正确的加密和解密,不会出现任何问题。
现在我有一个问题,我们正在从Enterprise Library 5.0移动到Enterprise Library 6.0,在新版本中,他们删除了Cryptography块,并建议使用.Net密码术。
因此,我决定使用Rijndael .Net类替换这些行的自定义代码。我使用此主题作为参考(Encrypt and decrypt a string),但使用RijndaelManaged创建它,但我有点困惑,密钥怎么办?因为一些数据已经加密了,如何获取并使用相同的密钥来解密数据并使用它?
我打开了版本5.0的配置管理器以查看密钥,但我能否使用它?
有人能给我详细解释一下吗?

1
在EntLib5中,密钥存储在由DPAPI(用户或机器模式)保护的密钥文件中。您需要读取它并使用ProtectedData.Unprotect()解密它。此外,请注意,密钥文件中的前4个字符是版本号,而不是密钥的一部分。根据您的应用程序,您可能希望考虑一次性迁移以使用旧方案进行解密,然后使用新方法进行加密(具体取决于新方法与EntLib的相似程度)。 - Randy Levy
此外,您可能想要下载EntLib 5源代码以查看内部发生了什么:http://www.nuget.org/packages/EnterpriseLibrary.Source/ - Randy Levy
1
对于像这样处理遗留代码的其他人来说。IV 可能作为加密数据的一部分存储,确切地说是前 16 个字节。所以当您解密时,可以从那里获取它,而数据则是其余的字节。 - Leo Muller
1个回答

1
如何获取和使用相同的密钥来解密数据并使用它呢?密码加密的一个想法是它们独立于实现技术。您可以使用.NET加密数据,然后使用Java或其他语言解密。你需要做的只有两步:1.有密钥。在对称密码中,相同的密钥用于加密和解密过程。2.有配置值(如IV或初始化向量、密码块长度、加密类型、哈希函数、密码名称等)。如果您具备这两个条件,就可以在任何技术中进行加密/解密(首先需要一些工作,主要是搜索正确的密钥或配置)。不熟悉配置管理器,但是您必须从某个地方提取密钥。确保以正确的格式获取它-您需要原始二进制格式。如果它保存在文件中,可能会使用Windows DP API进行加密,也可能以Base64格式存储。

这个 IV 值对于 RijndaelManaged 也是必需的吗?我的意思是,例如你初始化它并且没有设置 IV,它会是 null 还是会有一些随机值用于加密?关于密钥,我认为它是十六进制形式的,但我完全不知道 IV。企业库使用此方法进行加密,但是关于 IV 以及他们如何确切地执行它,没有任何信息... - Alnedru
据我所知,大多数密码使用 IV。如果在整个过程中没有更改或使用相同的 IV,则最终可以推导出明文消息([更多信息请参见这里](http://crypto.stackexchange.com/a/734))。我怀疑 EntLib 没有使用 IV,请尝试在未设置 IV 的情况下运行解密操作,并查看是否可以获得有意义的结果。 - oleksii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接