PHP解密从C#.NET RIJNDAEL算法256的String

问题描述:

固定它。

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



无论出于何种原因,PHP是转换+的从GET variablesinto空间

for whatever reason, Php was converting the +'s from the GET variablesinto spaces

-

我试图解密在C#.NET被解密的字符串

I am trying to decrypt a string that is being decrypted in C#.NET.

代码的结果不尽相同,有好几次,其中最后一个字符串有一些部分解密,它的其余部分是随机的字符。

The results of the code vary, There were several occasions where the final string had some parts decrypted, and the rest of it was random characters.

大部分时间的解密字符串就是所有的随机字符,我也尝试过一些PHP函数来删除PKCS7填充但他们没有固定的问题。

Most of the time the "decrypted" string is just all random characters, I also tried some Php functions to remove PKCS7 padding but none of them fixed the problem.

我看了网站上的几个类似的问题,但没有一个人帮助。

I've looked at several similar questions on the site but none of them were of help.

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的输出:

四: WzsMlG39tfCGuX2EQM3​​vq8CoqGA xC0nW jICls8Cno =结果
:b0dJN2c6cklVUX1qUGlFfGMweXRKbH5fSEMuXjAgfQo =

IV: WzsMlG39tfCGuX2EQM3vq8CoqGA xC0nW jICls8Cno=
key: b0dJN2c6cklVUX1qUGlFfGMweXRKbH5fSEMuXjAgfQo=

加密字符串: oLxa21fxfQGg0EJ5rwMjEzMblvcaTq0AInDAsD88wAkNeLqOdon0ukLjz49Hpp36KPTKcTGkj1f7EPYPAAbuADnr3Ff0zpptZkx2d22VRbHr​​Mgj QLF9vDxQRT3er3UAXsAfKKTyW8qeSIgrzACFLX3yoro / bzWic rt7ED7y0jZ7a1Hci3GMz / 4KhwaftarbV QQWStJlSOqdxAdmtRRe84Vi3085S6um51bNrh5QzGRH PcpucfqaTb3junfO9g67j2JUQaM / Tj1EGnv6oX3wATR / LuWyhnhrCH86u10I =

Encrypted String: oLxa21fxfQGg0EJ5rwMjEzMblvcaTq0AInDAsD88wAkNeLqOdon0ukLjz49Hpp36KPTKcTGkj1f7EPYPAAbuADnr3Ff0zpptZkx2d22VRbHrMgj QLF9vDxQRT3er3UAXsAfKKTyW8qeSIgrzACFLX3yoro/bzWic rt7ED7y0jZ7a1Hci3GMz/4KhwaftarbV QQWStJlSOqdxAdmtRRe84Vi3085S6um51bNrh5QzGRH PcpucfqaTb3junfO9g67j2JUQaM/Tj1EGnv6oX3wATR/LuWyhnhrCH86u10I=

键尺寸: 32结果
块大小: 32结果
密码:的Rijndael-256结果
第四尺寸: 32结果
结果:
/ CI ^ / CGSC (

key size: 32
block size: 32
cipher: Rijndael-256
iv size: 32
Result: /ci�����^/�c�g�������s��c�(��

原始的字符串(JSON):
{用户:JSMITH,名字:约翰,姓氏:史密斯,手机:12223334444.5555,电子邮件:john.smith@domain.com,地址:123有一条街,地址2:易456 ,城市:一些城市,国家:LA,拉链:55555}

Original String (JSON): {"user":"jsmith","firstName":"John","lastName":"Smith","phone":"12223334444.5555","email":"john.smith@domain.com","address":"123 Some Street","address2":"apt 456","city":"Some City","state":"LA","zip":"55555"}

通过使用下面的代码固定它。

Fixed it by using the following code.

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



无论出于何种原因,PHP是转换+从GET variablesinto空间的。

For whatever reason, PHP was converting the +'s from the GET variablesinto spaces.