我正在尝试构建一个可以与html5 websockets握手的AS3套接字服务器。我的代码基于此链接http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17
这就是我使用与链接中的示例相同的值:
import com.dynamicflash.util.Base64;
import com.adobe.crypto.SHA1;
function getKey():void{
var key:String = "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
key = SHA1.hash(key);
key = Base64.encode(key);
trace(key);
//traces YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ== instead of s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
}
现在该示例声明输出应为:
具体而言,如上例所示,| Sec-WebSocket-Key |标题字段具有值“dGhlIHNhbXBsZSBub25jZQ ==”,服务器将串联字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”以形成字符串“dGhlIHNhbXBsZSBub25jZQ == 258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。然后服务器将获取此SHA-1哈希,给出值0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea。然后对该值进行base64编码(参见[RFC4648]的第4节),给出值“s3pPLMBiTxaQ9kYGzzhZRbK + xOo =”
我错过了什么吗?
答案 0 :(得分:2)
因为我甚至阅读过任何ActionScript但是你不应该替换
key = SHA1.hash(key);
key = Base64.encode(key);
与
key = SHA1.hashToBase64(key);
?当前代码将sha1散列(字节数组)转换为字符串,但是它需要传递给base64编码器的原始字节数组。
答案 1 :(得分:0)
请告诉我这是否有任何帮助: