【问题标题】:Decrypt TripleDES from PHP to C# not getting same results从 PHP 到 C# 解密 TripleDES 没有得到相同的结果
【发布时间】:2015-01-23 05:19:27
【问题描述】:

我有一个 PHP 函数可以很好地解密 TripleDes 消息。现在我正在尝试将它移植到 C#,但我得到了不同的结果。我不确定这是怎么回事。它是 CBC、相同的键、相同的 IV、相同的填充等。

PHP 函数(它工作正常):

public static function DecryptInstallationCode($enc)
{

    $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

    $iv = '12345678';
    $key = '123456789012345678901234';

    $bin = base64_decode($enc); 

    mcrypt_generic_init($td, $key, $iv);
    $str = mdecrypt_generic($td, $bin);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    return $str; 
}

C# 函数(它返回不同的结果):

    public static string DecryptInstallationCode(string enc)
    {
        const string iv = "12345678";
        const string key = "123456789012345678901234";

        var bin = Convert.FromBase64String(enc);    

        TripleDES tdes = TripleDES.Create();
        tdes.IV = Encoding.ASCII.GetBytes(iv);
        tdes.KeySize = 192;
        tdes.Key = Encoding.ASCII.GetBytes(key);
        tdes.Mode = CipherMode.CBC;
        tdes.Padding = PaddingMode.Zeros;
        var ict = tdes.CreateEncryptor();

        var result = ict.TransformFinalBlock(bin, 0, bin.Length);

        var strResult = Encoding.UTF8.GetString(result);

        return strResult;
    }

【问题讨论】:

    标签: c# php encryption tripledes


    【解决方案1】:

    对不起,我觉得我很愚蠢。问题出在 tdes.CreateEncryptor();那显然需要 tdes.CreateDecryptor();

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2016-02-19
      • 2011-01-28
      • 2015-07-12
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 2020-03-21
      • 2021-01-09
      相关资源
      最近更新 更多