У меня есть функция 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;
}
Извините, я чувствую себя глупо. Проблема в tdes.CreateEncryptor (); это, очевидно, должно быть tdes.CreateDecryptor ();
Других решений пока нет …