C# 中的 openssl 以匹配 Linux 中的 openssl des-ede3-CBC

本文关键字:中的 openssl Linux des-ede3-CBC | 更新日期: 2023-09-27 17:56:29

我需要在linux中加密数据,并在Windows C#应用程序中解密这些数据。我在 Linux 中使用以下命令加密。openssl enc -des-ede3-cbc -K 3B388F0EFDA72AF16DBA734FE9704AF7 -iv 00000000000000000 -in file.txt -out file.enc.如果尝试使用 http://sourceforge.net/projects/openssl-net/中提供的 DLL 在 C# 应用程序中解密。我无法获得正确的解密数据。请向我发送等效的 C# 代码以在窗口中解密。

C# 中的 openssl 以匹配 Linux 中的 openssl des-ede3-CBC

查看 TripleDESCryptoServiceProvider 的 MSDN 示例,不要忘记设置实例的正确模式、键、IV 和填充属性:

var provider = new System.Security.Cryptography.TripleDESCryptoServiceProvider();
provider.Mode = CipherMode.CBC;
provider.Key = new byte[] { 0x3B, 0x38, 0x8F, 0x0E, 0xFD, 0xA7, 0x2A, 0xF1, 0x6D, 0xBA, 0x73, 0x4F, 0xE9, 0x70, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
provider.IV = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
provider.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

您还应该在命令中添加 -p 选项,以便您可以看到 OpenSSL 用于加密的实际密钥:

$ openssl enc -des-ede3-cbc -K 3B388F0EFDA72AF16DBA734FE9704AF7 -iv 0000000000000000 -in file.txt -out file.enc -nosalt -p
key=3B388F0EFDA72AF16DBA734FE9704AF70000000000000000
iv =0000000000000000

您在命令行上传递的密钥太短,因此 OpenSSL 会向其附加零,您需要在 C# 代码中使用完全相同的密钥。