我创建在线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#上有不同编码规则的麻烦,但是如何让它正常工作?
答案 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);
}
这种方法允许在服务器上获得相同的字节数组以进行解密。