Need to convert the following function from PHP to C # (asp.net)
function encrypt_3DES($message, $key){
$bytes = array(0,0,0,0,0,0,0,0);
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
return $ciphertext;
}
Where
$messageis the string to encode, and $keyis the key
$key encoded by base 64 and decoded before calling the function
$key = $this->decodeBase64($key);
$ciphertext = $this->encrypt_3DES($message, $key);
After the C # code, I used:
key = Base64Decode(key);
ciphertext = encrypt_3DES(order, key,true);
Where
private string Base64Decode(string base64EncodedData)
{
byte[] base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return Encoding.GetEncoding(28591).GetString(base64EncodedBytes);
}
and
private string encrypt_3DES(string message, string k,bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(message);
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(Encoding.GetEncoding(28591).GetBytes(k));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.GetEncoding(28591).GetBytes(k);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
The results of PHP and C # do not match.