Я пытаюсь переписать эту функцию в C#. но C# выход не соответствует РНРPHP MCRYPT_RIJNDAEL_128 шифрование в C#
версии PHP
// Encrypt data using AES128-cbc
function encrypt($data, $key, $iv) {
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$multipass = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
return $multipass;
}
C# Version
public static string encrypt(string encryptionString, string iv, string key)
{
byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);
var rijn = SymmetricAlgorithm.Create();
rijn.KeySize = 128;
rijn.Mode = CipherMode.CBC;
var ms = new MemoryStream();
var cs = new CryptoStream(ms, rijn.CreateEncryptor(Encoding.UTF8.GetBytes(key), Encoding.UTF8.GetBytes(iv)), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
var tmp = Encoding.UTF8.GetString(ms.ToArray());
return tmp;
}
Почему вы прыгаете через эти '' CryptoStream' + MemoryStream' обручи, когда вы могли бы просто назвать 'RIJN .TransformFinalBlock'? – CodesInChaos
Для других, пытающихся заставить это работать, PaddingMode.Zeros (ответ Syon ниже) был для меня решением. –