相关疑难解决方法(0)

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

固定它.

$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)

php c# rijndael

8
推荐指数
1
解决办法
5217
查看次数

使用PHP和c#的Mcrypt和base64

我已经在两个平台上编写了相同的方法,我认为这些方法应该会产生相同的结果,但它并没有发生.我用相同的密钥加密了相同的文本,结果不同.有人能弄明白为什么会这样吗?

字符串:这是测试

密钥: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)

php c# encryption base64 mcrypt

7
推荐指数
1
解决办法
7940
查看次数

将Laravel的AES 256加密器转换为C#

在使用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

有什么想法我必须输入以获得相同的结果?:)

php c# encryption laravel

1
推荐指数
1
解决办法
1274
查看次数

标签 统计

c# ×3

php ×3

encryption ×2

base64 ×1

laravel ×1

mcrypt ×1

rijndael ×1