繁体   English   中英

PHP加密和C#解密[Rijndael]

[英]PHP Encryption and C# Decryption [Rijndael]

我使用RJ256登录,因为返回字符串很小,所以可以工作(PHP提供了加密的字符串,C#需要解密)。

数据将被解密并完全正常工作。 虽然,现在我将一个79KB的字符串从PHP(已加密)传输到C#(需要解密),但出现此错误: http : //i.imgur.com/M4sgEct.png仅当字符串有点比平常大。

这是我要加密的PHP代码:

private function _encrypt($data)
{
    $iv = "sfhfskfsusfdsfd79fd8s79sdf789f79";
    $key = "da4b9237bacccdf1";
    // to append string with trailing characters as for PKCS7 padding scheme
    $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
    $padding = $block - (strlen($data) % $block);
    $data .= str_repeat(chr($padding), $padding);

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);

    // this is not needed here            
    //$crypttext = urlencode($crypttext);

    return base64_encode($crypttext);
}

这是我要解密的C#代码:

public static dynamic DecryptRJ256(string cypher, bool isJson = true, bool getBytes = false)
{
    string sRet;

    var encoding = new UTF8Encoding();
    var key = encoding.GetBytes("da4b9237bacccdf1");
    var iv = encoding.GetBytes("sfhfskfsusfdsfd79fd8s79sdf789f79");

    using (var rj = new RijndaelManaged())
    {
        try
        {
            rj.Padding = PaddingMode.PKCS7;
            rj.Mode = CipherMode.CBC;
            rj.KeySize = 256;
            rj.BlockSize = 256;
            rj.Key = key;
            rj.IV = iv;
            var ms = new MemoryStream(Decode(cypher));

            using (var cs = new CryptoStream(ms, rj.CreateDecryptor(key, iv), CryptoStreamMode.Read))
            {
                using (var sr = new StreamReader(cs))
                {
                    sRet = sr.ReadLine();
                }
            }
        }
        finally
        {
            rj.Clear();
        }
    }

    // ReSharper disable once AssignNullToNotNullAttribute
    return (isJson ? JsonConvert.DeserializeObject<dynamic>(sRet) : (getBytes ? Encoding.UTF8.GetBytes(sRet) : (dynamic)sRet));
}

我该如何运作?

这个怎么样:

  public static byte[] DecryptRJ256(string prm_key, string prm_iv, string prm_text_to_decrypt)
  {
        var sEncryptedString = prm_text_to_decrypt;

        var myRijndael = new RijndaelManaged();
        myRijndael.Padding = PaddingMode.Zeros;
        myRijndael.Mode = CipherMode.CBC;
        myRijndael.KeySize = 256;
        myRijndael.BlockSize = 256;

        byte[] key;
        byte[] IV;

        key = Encoding.ASCII.GetBytes(prm_key);
        IV = Encoding.ASCII.GetBytes(prm_iv);

        var decryptor = myRijndael.CreateDecryptor(key, IV);

        var sEncrypted = Convert.FromBase64String(sEncryptedString);
        var fromEncrypt = new byte[sEncrypted.Length];

        var msDecrypt = new MemoryStream(sEncrypted);
        var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);

        csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);

        //Return (System.Text.Encoding.ASCII.GetString(fromEncrypt))
        return fromEncrypt;

  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM