C#でFoxycart XMLデータフィードを聴こうとしてい ますが、暗号化に帰着する問題が発生しています。
つまり、 RC4暗号化を使用して、エンコードおよび暗号化されたXMLとしてデータを送信します。
テストするために、C#でこれをテストするための(ユーザーが送信した)サンプルコードがいくつかあります。ユーザーの1人から提供されたこのサンプルRC4復号化コードを使用してみましたが、機能していないようで、サポートスタッフはC#RC4アルゴリズムを使用していると考えています。彼らはC#の専門家ではないので、ここで質問すると思いました。これがFoxyCartフォーラムへの投稿です
とにかく、XMLファイルを暗号化してURLに投稿することで応答をシミュレートする(しようとする)コードは次のとおりです(DataFeedKeyはメンバー変数として保存した文字列であることに注意してください)。
public ActionResult TestDataFeed()
{
string transactionData = (new StreamReader(@"D:\SampleFeed.xml")).ReadToEnd();
string encryptedTransactionData = RC4.Encrypt(DataFeedKey, transactionData, false);
string encodedTransactionData = HttpUtility.UrlEncode(encryptedTransactionData, Encoding.GetEncoding(1252));
string postData = "FoxyData=" + encodedTransactionData;
var req = (HttpWebRequest)WebRequest.Create("http://localhost:3396/FoxyCart/RecieveDataFeed");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
var sw = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
sw.Write(postData);
sw.Close();
HttpWebResponse resp = null;
try
{
resp = (HttpWebResponse)req.GetResponse();
string r = new StreamReader(resp.GetResponseStream()).ReadToEnd();
}
catch (WebException ex)
{
string err = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
}
return null;
}
これが、応答を受け取るコールバックメソッドです。
[ValidateInput(false)]
public ActionResult RecieveDataFeed(FormCollection collection)
{
string unencodedFeed = HttpUtility.UrlDecode(collection["FoxyData"], Encoding.GetEncoding(1252));
string transaction = RC4.Decrypt(DataFeedKey, unencodedFeed, false);
return Content("foxy");
}
この質問でRC4クラス全体をインラインで投稿する代わりに、このRC4クラスのコードへのリンクを次に示します。
質問の上部にある上記のリンクに投稿したように、問題は、内部の可変トランザクションをチェックするときです。
RecieveDataFeed()
メソッドでは、通常のXMLを元に戻す必要がありますが、代わりに次のように表示されます。
É?xø´ v´“Û·8êUŸí¥MïSÅJÖó5Cå7ã…ÄlÞ&þòG·¶ÝÙ3<ÍÖ¡«úüF¿¿ßìNµ>4¦Äu÷¼Â;£-w¤ƒûÊyL¹®½èíYö½’é(µJŒ~»»=3¼]F‡•=±Ùí]'鳫"øPç{Ù^yyéå–°ñ…5ðWF$zÉnÄ^_”Xë’ï%œ-5á
ÒÛ€jŠt`Â9œÇÞLU&¼~ç2îžúo/¢¶5,º*öOqÝ—‘.ó®šuf™å5G—õC®‰ÁéiÇúW®¦ÝÚ•Z±:„Q\p"p
ôÔiÛ!\D"ÉÂX3]ƒ°è€Œ«DQE‡kÝ@àö`gpöŽ÷nÛ={µÏßKQKüå(ö%¯¯Ü–9}¨¬°£7yo,«”ÜëCÍ/+…†ÕËî‘‹‰AÚmÇÙå©&©¡xÙkŒföX¯ÃX&×°S|kÜ6Ô°Üú\Ätóü-äUƆÈáÅ\ ’E8‚¤âÈ4޾«ãΚ_Sï£y‰xJº•bm*jo›‰ÜW–[ô†ÆJÐà$½…9½šžˆ_ÙÜù/®öÁVhzŠ¥ú(ñ£²6ˆb6¢ëße¤oáIðZuK}ÆÙ]"T¼*åZêñß5K—½òQSåRN Çë'Å¡
ÕyiÈX •bØðIk¿WxwNàäx®‹?cv+X™¥E!gd4â¤nÔ‹¢½Ð”ªÊQ!‚.e8s
Gyª4¼ò,}Yœ‚¹”±E‡Jy}Sæ
ƒ¦ýK'Ð}~B¦E3!0°ú´A–5Þ³£9$–8äÏ©?
œ‡8GÂø
コードは正しく見えます:
- 暗号化
- エンコード
- デコード
- 復号化
しかし、それは機能していないようです。上記で何が間違っている可能性があるかについての提案はありますか?