Как сгенерировать PHPES-совместимую зашифрованную строку 3DES ECB из c #

Мне нужно передать зашифрованную строку 3DES на веб-страницу PHP от C #, и мне не повезло.

Короче говоря, PHP-код, который я пытаюсь преобразовать:

    $message = $request->get('searchHash');
$searchHash = base64_decode(rawurldecode($message));
$key = $this->container->getParameter("api_encryption_key");
$decrypted = mcrypt_decrypt(MCRYPT_3DES, $key, $searchHash, MCRYPT_MODE_ECB);
//$data = unserialize($decrypted);
$searchString = str_replace("\x0", '', $decrypted);

который я переписал как:

        using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider())
{
byte[] iv0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] toEncryptArray = Encoding.ASCII.GetBytes(toEncrypt);

tdes.IV = iv0;
tdes.Key = Encoding.ASCII.GetBytes(key);
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.Zeros;

ICryptoTransform cTransform = tdes.CreateEncryptor();

byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);

tdes.Clear();

return resultArray.ToString();
}

однако результаты c # не согласуются с результатами php.

Кто-нибудь может пролить свет на то, почему?

Благодарю.

0

Решение

Вам нужно вернуть Convert.ToBase64String(resultArray) в коде C #. возврате resultArray.ToString() дам тебе System.Byte[] а не то, что вы ожидаете. В этом случае код PHP потерпит неудачу.

C #:

string toEncrypt = "SecretText";
string key = "SecretKeySecretKeySecret";

using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider())
{
byte[] iv0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] toEncryptArray = Encoding.ASCII.GetBytes(toEncrypt);

tdes.IV = iv0;
tdes.Key = Encoding.ASCII.GetBytes(key);
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.Zeros;

ICryptoTransform cTransform = tdes.CreateEncryptor();

byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);

tdes.Clear();

string s = Convert.ToBase64String(resultArray);
}

PHP:

<?php
$message = "b9ssRELdtRWVlNuJqaYUrg==";
$searchHash = base64_decode(rawurldecode($message));
$key = "SecretKeySecretKeySecret";
$decrypted = mcrypt_decrypt(MCRYPT_3DES, $key, $searchHash, MCRYPT_MODE_ECB);
//$data = unserialize($decrypted);
$searchString = str_replace("\x0", '', $decrypted);

echo $searchString;
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector