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;
}
Sorry, I feel stupid. The problem is in tdes.CreateEncryptor(); that obviously needed to be tdes.CreateDecryptor();