我工作的一個基於瀏覽器的問答遊戲與獲取發送到用戶預先錄製的音頻線索。爲了加載服務器以及讓音頻已經傳輸,文件已經在遊戲開始之前提前發送給用戶。由於遊戲將以實時和競爭的方式進行,因此播放器之前沒有機會收聽音頻文件是非常重要的。我現在的想法是基本上向用戶發送AES加密文件,通過websockets實時發送文件的密碼,在瀏覽器中使用crypto.js解密並立即播放。
的問題
出於某種原因,我不能讓使用crypto.js正確解密的二進制文件,這樣我就可以將其送到decodeAudioData音頻上下文。我從解密或廢話中得到空的答覆。
openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"testpass" -e -base64
產生的文件,然後通過XMLHttpRequest裝載有:
我試圖
音頻(在這種情況下,MP3)的AES根據使用下列調用的文檔加密請求類型文本(我已經嘗試過arraybuffer,但也失敗了),結果存儲在一個變量(this.protectedBuffer
)中。
據Crypto.js文檔,這個現在應該解密文件:
var decrypted = CryptoJS.AES.decrypt(this.protectedBuffer, 'testpass');
// next step obviously doesn't work as decrypted is
// is not an arraybuffer.
context.decodeAudioData(decrypted, function() { ... });
然而這會導致什麼可玩的,並僅返回單詞表。我知道我錯過了一些步驟,但我現在完全不知道什麼是不工作的,並且如果有人能指出我正確的方向並告訴我我做錯了什麼,那將更令人高興。
編輯:這裏是我想要達到http://jsfiddle.net/HKu3n/1/
你正在用base64傳輸它...你是否在傳遞給CryptoJS.AES.decrypt之前解碼base64? –
我有種嘗試過一切。這是我嘗試過的最新的東西:http://jsfiddle.net/HKu3n/1/ –
我明白了!即將到來的答案.... –