Decrypt TripleDES from PHP to C# not getting same results

361 Views Asked by At

I have a PHP function that works fine decrypting a TripleDes message. Now I am trying to port it to C# but I get different results. I am not sure what it is wrong. It is CBC, same key, same IV, same padding, etc.

The PHP function (it works fine):

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# function (it returns different result):

    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;
    }
1

There are 1 best solutions below

0
On BEST ANSWER

Sorry, I feel stupid. The problem is in tdes.CreateEncryptor(); that obviously needed to be tdes.CreateDecryptor();