【问题标题】:openssl in C# to match openssl des-ede3-cbc in linuxC# 中的 openssl 以匹配 linux 中的 openssl des-ede3-cbc
【发布时间】:2014-04-04 06:53:37
【问题描述】:

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

【问题讨论】:

    标签: c# linux visual-studio-2008 cryptography openssl


    【解决方案1】:

    看看MSDN examples for TripleDESCryptoServiceProvider,别忘了为你的实例设置正确的Mode、Key、IV和Padding属性:

    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# 代码中使用完全相同的密钥。

    【讨论】:

    • byte[] encda​​ta = System.IO.File.ReadAllBytes(@"E:\encrypt.txt"); ICryptoTransform ct = provider.CreateDecryptor(); byte[] 输出 = ct.TransformFinalBlock(encda​​ta, 0, encda​​ta.Length);提供者.清除(); Console.WriteLine("decrpted --->" + System.Text.Encoding.ASCII.GetString(output)); System.Console.ReadKey();这是我在 C# 中的应用程序。我收到“TransformFinalBlock”的“错误数据”异常。请帮我解决这个问题。
    • 它不工作。首先,我在 linux PC 中加密并将加密文件复制到 Windows PC。然后运行 ​​C# 应用程序来解密文件数据。我收到错误“发生加密错误:数据错误”。如何解决这个问题?
    • @user3020723 我已经在完全相同的场景中对其进行了测试——在 Linux 上使用 OpenSSL 加密并在 Windows 上使用 C# 应用程序解密——我可以确认它正在工作。您是否在键值上附加了 8 个零?
    • 我正在设置正确的模式。即 cbc。
    • @user3020723 你读过我更新的答案了吗?您是否更新了您的 provider.Key 值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2014-09-11
    • 2012-06-10
    • 2014-01-08
    相关资源
    最近更新 更多