0

我创建在线 Flash 游戏,并使用 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

你如何将请求数据传递给服务器,调用 GetBytes 只会给你一个传入字符串的字节数组,不清楚 requestData 包含什么。

于 2013-03-23T12:55:31.353 回答
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 回答