在C#中解密openSSL加密文件

时间:2018-06-19 20:58:17

标签: c# asp.net encryption openssl asp.net-core-webapi

我正在移植一些在后端系统上运行的旧版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工具解密?

1 个答案:

答案 0 :(得分:0)

当您提供带有-k标志的密码时,OpenSSL使用一个(不安全的)KDF,通常称为EVP_BytesToKey

此KDF用于导出用于加密的密钥和IV。

您将需要找到此CDF的C#实现,因为.NET不支持该实现。从那里,您可以确定IV和密钥,并使用内置的Aes类来解密文件。

回想一下,KDF实际上是不安全的,因此,如果您打算继续使用OpenSSL,则还应该升级使用-K标志和-iv标志对其进行加密的方式。

相关问题