0

オンライン フラッシュ ゲームを作成し、ゲームの結果をゲーム サーバー i に RC4 暗号を使用して転送します。

var resultBytes:ByteArray = new ByteArray();
resultBytes.writeUTFBytes(rawData);
rc4.encrypt(resultBytes);
resultBytes.position = 0;
var toServer:String = resultBytes.readUTFBytes(resultBytes.length);

サーバー側では、同じコードで C# ASP.Net サービスが動作します

byte[] resultBytes = Encoding.UTF8.GetBytes(requestData);

AS3 toServer 文字列は С# requestData と同等ですが、AS3 resultBytes は C# resultBytes と同等ではありません。また、リクエストデータを復号化できません。

Flash と C# でエンコーディング規則が異なると困ると思いますが、どうすれば正しく動作するのでしょうか?

4

2 に答える 2

0

あらゆる努力にもかかわらず、AS3 ByteArray.readUTFBytes と C# Encoding.UTF8.GetBytes(requestData) の違いと、問題の解決方法がわかりませんでした。

その結果、クライアントに書き込みます

var toServer:String = "";
for (var a:int = 0; a < resultBytes.length; a++) {
  toServer+= resultBytes[a].toString() + ",";           
}

そしてサーバー上

string[] splited = requestData.Split(',');
byte[] resultBytes = new byte[splited.Length];

for (int a = 0; a < splited.Length; a++)
{
  if (splited[a] == String.Empty)
        continue;
  resultBytes[a] = byte.Parse(splited[a], System.Globalization.NumberStyles.Integer);
}

このメソッドにより、サーバー上で同一のバイト配列を取得して復号化できます。

于 2013-03-24T09:23:50.717 に答える
0

リクエスト データをどのようにサーバーに渡しますか。GetBytes を呼び出すと、渡された文字列のバイト配列が返されるだけです。requestData に何が含まれているかは明確ではありません。

于 2013-03-23T12:55:31.353 に答える