Php расшифровывает строку из C # .NET RIJNDAEL 256 - PullRequest
8 голосов
/ 26 мая 2011

Исправлено.

$data = base64_decode(str_replace(' ', '+', $_GET['data']));

по какой-то причине Php конвертировал + из переменных GET в пространства

-

Я пытаюсь расшифровать строку, которая расшифровывается в C # .NET.

Результаты кода могут быть разными. Было несколько случаев, когда в последней строке были расшифрованы некоторые части, а остальная часть была случайными символами.

В большинстве случаев «расшифрованная» строка - это все случайные символы, я также пробовал некоторые функции Php для удаления отступов PKCS7, но ни одна из них не устранила проблему.

Я посмотрел несколько похожих вопросов на сайте, но ни один из них не помог.

C #

// called as Response.Redirect(url + encryptParams(param));

private string encryptData(string data)
{
    Rijndael aes = Rijndael.Create();
    aes.KeySize = 256;
    aes.BlockSize = 256;
    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.PKCS7;
    aes.Key = Convert.FromBase64String("b0dJN2c6cklVUX1qUGlFfGMweXRKbH5fSEMuXjAgfQo=");

    ICryptoTransform crypto = aes.CreateEncryptor(aes.Key, aes.IV);
    byte[] txt = ASCIIEncoding.UTF8.GetBytes(data);          
    byte[] cipherText = crypto.TransformFinalBlock(txt, 0, txt.Length);

    return "&data=" + Convert.ToBase64String(cipherText) + "&iv=" + Convert.ToBase64String(aes.IV);
}

Php:

   $data = base64_decode($_GET['data']);
   $iv = base64_decode($_GET['iv']);

   echo "<br /><b>IV</b>: " . $_GET['iv'] .
       "<br /><b>Encrypted String</b>: <br /><textarea>".$_GET['data']."</textarea>" .
       "<br /><b>key size:</b> " . mcrypt_get_key_size ( MCRYPT_RIJNDAEL_256,  MCRYPT_MODE_CBC) .
       "<br /><b>block size:</b> " . mcrypt_get_block_size ( MCRYPT_RIJNDAEL_256,  MCRYPT_MODE_CBC) .
       "<br /><b>cipher:</b> " . mcrypt_get_cipher_name ( MCRYPT_RIJNDAEL_256 ) .
       "<br /><b>iv size:</b> " .  mcrypt_get_iv_size  ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC) . "<br />"; 

   echo "Result: " . 
      mcrypt_decrypt
      (
          MCRYPT_RIJNDAEL_256,
          base64_decode("b0dJN2c6cklVUX1qUGlFfGMweXRKbH5fSEMuXjAgfQo="),
          $data,
          MCRYPT_MODE_CBC,
          $iv
       );

Php выход:

IV: WzsMlG39tfCGuX2EQM3vq8CoqGA xC0nW jICls8Cno =
key : b0dJN2c6cklVUX1qUGlFfGMweXRKbH5fSEMuXjAgfQo =

зашифрованная строка: oLxa21fxfQGg0EJ5rwMjEzMblvcaTq0AInDAsD88wAkNeLqOdon0ukLjz49Hpp36KPTKcTGkj1f7EPYPAAbuADnr3Ff0zpptZkx2d22VRbHrMgj QLF9vDxQRT3er3UAXsAfKKTyW8qeSIgrzACFLX3yoro / bzWic rt7ED7y0jZ7a1Hci3GMz / 4KhwaftarbV QQWStJlSOqdxAdmtRRe84Vi3085S6um51bNrh5QzGRH PcpucfqaTb3junfO9g67j2JUQaM / Tj1EGnv6oX3wATR / LuWyhnhrCH86u10I =

размер ключа: 32
размер блока: 32
шифр: Rijndael-256
iv размер: 32
Результат: / CI ^ / CGSC (

Исходная строка (JSON): { "Пользователь": "JSmith", "Имя": "Джон", "LastName": "Смит", "телефон": "12223334444.5555", "электронная почта": "john.smith@domain.com", "адрес" : "123 Some Street", "address2": "apt 456", "city": "Some City", "state": "LA", "zip": "55555"}

1 Ответ

2 голосов
/ 08 июня 2011

Исправлено с помощью следующего кода.

$data = base64_decode(str_replace(' ', '+', $_GET['data']));

По какой-то причине PHP преобразовывал + из переменных GET в пробелы.

...