Byte Array.readUTF Bytes麻烦解码结果

时间:2013-03-23 12:38:12

标签: c# asp.net actionscript-3

我创建在线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#上有不同编码规则的麻烦,但是如何让它正常工作?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
}

这种方法允许在服务器上获得相同的字节数组以进行解密。