固定它.
$data = base64_decode(str_replace(' ', '+', $_GET['data']));
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,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);
}
Run Code Online (Sandbox Code Playgroud)
PHP的:
$data = base64_decode($_GET['data']);
$iv = base64_decode($_GET['iv']);
echo "<br /><b>IV</b>: " . …Run Code Online (Sandbox Code Playgroud) 我已经在两个平台上编写了相同的方法,我认为这些方法应该会产生相同的结果,但它并没有发生.我用相同的密钥加密了相同的文本,结果不同.有人能弄明白为什么会这样吗?
字符串:这是测试
密钥:1234567812345678
PHP加密字符串:ybUaKwQlRNwOjJhxLWtLYQ ==
C#加密字符串:r2YjEFPyDDacnPmDFcGTLA ==
C#功能
static string Encrypt(string plainText, string key)
{
string cipherText;
var rijndael = new RijndaelManaged()
{
Key = Encoding.UTF8.GetBytes(key),
Mode = CipherMode.ECB,
BlockSize = 128,
};
ICryptoTransform encryptor = rijndael.CreateEncryptor(rijndael.Key, rijndael.IV);
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
using (var streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(plainText);
streamWriter.Flush();
}
cipherText = Convert.ToBase64String(memoryStream.ToArray());
//cryptoStream.FlushFinalBlock();
}
}
return cipherText;
}
private static string …Run Code Online (Sandbox Code Playgroud) 在使用Crypt::Encrypt('secret')Laravel时,我需要在C#中创建相同的结果.我发现这个线程Rijndael 256在c#和php之间加密/解密?
它似乎是我需要的,但我在第三个参数,初始化矢量:(.
Laravel使用Rijndael AES加密数据.所有用户必须输入的是一个秘密密钥,在config文件夹中,它是完全随机的,长度为32个字符.
encyrption方法如下所示:
public function encrypt($value)
{
$iv = mcrypt_create_iv($this->getIvSize(), $this->getRandomizer());
$value = base64_encode($this->padAndMcrypt($value, $iv));
// Once we have the encrypted value we will go ahead base64_encode the input
// vector and create the MAC for the encrypted value so we can verify its
// authenticity. Then, we'll JSON encode the data in a "payload" array.
$mac = $this->hash($iv = base64_encode($iv), $value);
return base64_encode(json_encode(compact('iv', 'value', 'mac')));
}
Run Code Online (Sandbox Code Playgroud)
完整的Encryptor.php可以在这里找到:http://pastebin.com/yfWLPxGn
有什么想法我必须输入以获得相同的结果?:)