我正在移植一些在后端系统上运行的旧版PHP软件。现有应用程序通过调用CLI工具来加密通过apache服务的文件,从而执行OpenSSL。
我要构建的是具有相同功能但不必调用任何CLI工具或将文件保存在磁盘上的ASP.NET核心WebAPI。该API将从存储库中获取数据,进行加密并动态提供结果。但是,为了保持向后兼容性,我需要确保两个系统都可以对文件进行加密/解密。
我对于如何使用ASP.NET core 2中可用的解密解密以前用OpenSSL加密的文件有点不知所措。我知道用于加密文件的密码短语,但是我不了解它与.NET中加密库的要求之间的关系。
下面是用于加密的示例OpenSSL(v0.9.8)命令:
openssl enc -e -aes-256-cbc -k abc123 -in abc123.xml.tmp -out abc123.xml
如何仅使用ASP.NET Core将文件转换回纯文本?
如何使用C#重新加密,以便能够使用OpenSSL CLI工具解密?
答案 0 :(得分:0)
当您提供带有-k
标志的密码时,OpenSSL使用一个(不安全的)KDF,通常称为EVP_BytesToKey
。
此KDF用于导出用于加密的密钥和IV。
您将需要找到此CDF的C#实现,因为.NET不支持该实现。从那里,您可以确定IV和密钥,并使用内置的Aes
类来解密文件。
回想一下,KDF实际上是不安全的,因此,如果您打算继续使用OpenSSL,则还应该升级使用-K
标志和-iv
标志对其进行加密的方式。