問題描述
我正在嘗試在 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网站在线播放
|
网站黄色在线
|
午夜精品|