2012-03-14 191 views
0

我想建立一個AS3套接字服務器,可以與html5 websockets握手。我基地我這個代碼鏈接http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17AS3 Websocket握手

這就是我一直在使用相同的值作爲鏈接的例子:

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 =」

我錯過了什麼?

回答

2

它有一段時間我甚至看任何ActionScript,但你不應該取代

key = SHA1.hash(key); 
key = Base64.encode(key); 

key = SHA1.hashToBase64(key); 

?當前的代碼將sha1散列(一個字節數組)轉換爲一個字符串,但它的原始字節數組需要傳遞給base64編碼器。