久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

C#加密轉(zhuǎn)PHP解密

C# Encryption to PHP Decryption(C#加密轉(zhuǎn)PHP解密)
本文介紹了C#加密轉(zhuǎn)PHP解密的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在嘗試在 C# 中加密一些(cookie)數(shù)據(jù),然后在 PHP 中對其進行解密.我選擇使用 Rijndael 加密.我?guī)缀踝屗ぷ髁耍酥挥胁糠治谋颈唤饷埽∥覐倪@個例子開始工作:在 C# 中解密 PHP 加密字符串

I'm trying to encrypt some (cookie) data in C# and then decrypt it in PHP. I have chosen to use Rijndael encryption. I've almost got it working, except only part of the text is decrypted! I started working from this example: Decrypt PHP encrypted string in C#

這是我正在加密的文本 (JSON)(已刪除敏感信息):

Here's the text (JSON) that I am encrypting (sensitive information removed):

{"DisplayName":"xxx", "Username": "yyy", "EmailAddress":"zzz"}

所以我登錄到 C# 應(yīng)用程序,它從存儲的密鑰和 IV 創(chuàng)建/編碼 cookie,然后重定向到應(yīng)該解密/讀取 cookie 的 PHP 應(yīng)用程序.當我解密cookie時,它是這樣的:<罷工>

So I login to the C# app which creates/encodes the cookie from stored Key and IV and then redirects to the PHP app which is supposed to decrypt/read the cookie. When I decrypt the cookie, it comes out like this:

{"DisplayName":"xxx","F?A ;??HP=D???????4??z????????k?#E???R?j?5??t. t?D??" 

更新:我已經(jīng)更進一步了,這是現(xiàn)在的結(jié)果

UPDATE: i've gotten a little bit further and this is now the result

string(96) "{"DisplayName":"xxx","Username":"yyy","EmailAddress"?)???-?J??k/VV-v? ?9?B`7^" 

如您所見,它開始解密它,但隨后變得一團糟......

As you can see, it starts decrypting it, but then gets messed up...

當解密字符串時,它是正確的(帶填充,我有一個刪除填充的功能),但是如果我將測試字符串更改一個字符,我又得到了垃圾:

When Decrypt the string it comes out correct (with padding, which I have a function to remove padding), but if I change the test string by one character I get garbage again:

B?nHL?Ek    ????UΣlO????O??M??NO/?f.M???L??CC?Y>F??~?qd?+

這是我用來生成隨機密鑰和 IV 的 c# 代碼:

更新:我現(xiàn)在只使用靜態(tài)密鑰/IV,它們是:

UPDATE: I'm just using static key/IV for now, here they are:

Key: lkirwf897+22#bbtrm8814z5qq=498j5
IV: 741952hheeyy66#cs!9hjv887mxx7@8y

<打擊>

RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.BlockSize = 256;
symmetricKey.KeySize = 256;
symmetricKey.Padding = PaddingMode.Zeros;
symmetricKey.Mode = CipherMode.CBC;
string key = Convert.ToBase64String(symmetricKey.Key);
string IV = Convert.ToBase64String(symmetricKey.IV);

然后我將密鑰和 IV 保存到數(shù)據(jù)庫中,以便稍后檢索以進行編碼/解碼.

I then save the key and IV to a database to be retrieved later for encoding/decoding.

這是完整的加密類:

public static class Encryption
    {
        public static string Encrypt(string prm_text_to_encrypt, string prm_key, string prm_iv)
        {
            var sToEncrypt = prm_text_to_encrypt;

            var rj = new RijndaelManaged()
            {
                Padding = PaddingMode.PKCS7,
                Mode = CipherMode.CBC,
                KeySize = 256,
                BlockSize = 256,
                //FeedbackSize = 256
            };

            var key = Encoding.ASCII.GetBytes(prm_key);
            var IV = Encoding.ASCII.GetBytes(prm_iv);
            //var key = Convert.FromBase64String(prm_key);
            //var IV = Convert.FromBase64String(prm_iv);

            var encryptor = rj.CreateEncryptor(key, IV);

            var msEncrypt = new MemoryStream();
            var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);

            var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);

            csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
            csEncrypt.FlushFinalBlock();

            var encrypted = msEncrypt.ToArray();

            return (Convert.ToBase64String(encrypted));
        }

        public static string Decrypt(string prm_text_to_decrypt, string prm_key, string prm_iv)
        {

            var sEncryptedString = prm_text_to_decrypt;

            var rj = new RijndaelManaged()
            {
                Padding = PaddingMode.PKCS7,
                Mode = CipherMode.CBC,
                KeySize = 256,
                BlockSize = 256,
                //FeedbackSize = 256
            };

            var key = Encoding.ASCII.GetBytes(prm_key);
            var IV = Encoding.ASCII.GetBytes(prm_iv);
            //var key = Convert.FromBase64String(prm_key);
            //var IV = Convert.FromBase64String(prm_iv);

            var decryptor = rj.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 (Encoding.ASCII.GetString(fromEncrypt));
        }

        public static void GenerateKeyIV(out string key, out string IV)
        {
            var rj = new RijndaelManaged()
            {
                Padding = PaddingMode.PKCS7,
                Mode = CipherMode.CBC,
                KeySize = 256,
                BlockSize = 256,
                //FeedbackSize = 256
            };
            rj.GenerateKey();
            rj.GenerateIV();

            key = Convert.ToBase64String(rj.Key);
            IV = Convert.ToBase64String(rj.IV);
        }
    }

這是我用來解密數(shù)據(jù)的 PHP 代碼:

Here's the PHP code I am using to decrypt the data:

    function decryptRJ256($key,$iv,$string_to_decrypt)
{
    $string_to_decrypt = base64_decode($string_to_decrypt);
    $rtn = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_decrypt, MCRYPT_MODE_CBC, $iv);
    //$rtn = rtrim($rtn, "

主站蜘蛛池模板:
日韩av啪啪网站大全免费观看
|
99免费视频|
99久久久久久99国产精品免
|
久久久久久久久久毛片
|
国产精品一区二区无线
|
伊人春色在线观看
|
另类 综合 日韩 欧美 亚洲
|
欧美精品在线免费观看
|
香蕉久久a毛片
|
成人国产精品
|
一级做a爰片性色毛片16美国
|
日韩精品久久一区二区三区
|
一区二区不卡视频
|
亚洲自拍偷拍免费视频
|
一区二区三区在线观看免费视频
|
一级aaaaaa毛片免费同男同女
|
日本免费在线看
|
亚洲人在线观看视频
|
日韩精品免费在线观看
|
天天激情综合
|
91九色在线观看
|
久久精品免费一区二区
|
欧美亚洲综合久久
|
黄网站在线播放
|
91成人午夜性a一级毛片
|
国产一区二区三区在线看
|
国产成人精品免费视频
|
精品免费国产一区二区三区四区
|
91最新入口
|
亚洲精品久久久久久久久久久
|
精品久久久久久久久久久
|
久久久久久久久久久福利观看
|
美女久久视频
|
国产精品一区二区福利视频
|
免费成人高清在线视频
|
久久三区
|
国产精品激情在线
|
在线看av的网址
|
av网站在线播放
|
网站黄色在线
|
午夜精品|