Php解密来自C#.NET RIJNDAEL 256的字符串

固定它。

$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 "
IV: " . $_GET['iv'] . "
Encrypted String:
" . "
key size: " . mcrypt_get_key_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC) . "
block size: " . mcrypt_get_block_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC) . "
cipher: " . mcrypt_get_cipher_name ( MCRYPT_RIJNDAEL_256 ) . "
iv size: " . mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC) . "
"; 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 ^ / c g s c (

原始字符串(JSON): {“user”:“jsmith”,“firstName”:“John”,“lastName”:“Smith”,“phone”:“12223334444.5555”,“email”:“john.smith@domain。 com“,”地址“:”123 Some Street“,”address2“:”apt 456“,”city“:”Some City“,”state“:”LA“,”zip“:”55555“}

使用以下代码修复它。

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

无论出于何种原因,PHP正在将来自GET变量的+转换为空格。