2016-11-24 4 views
-4

AES暗号化されたビデオファイルをストリーミングしようとしています。しかし、我々は、私が要求した場合Golang AESはビデオをストリーミングする前に復号化します。http

ので、私のコードのhttpライターに復号化されたデータの出力を書き込む方法

package main 

     import (
      "crypto/aes" 
      "crypto/cipher" 
      "io" 
      "log" 
      "net/http" 
      "os" 
     ) 

     var key []byte = []byte("yourAESPrivateKey") 

     func ServeHTTP(w http.ResponseWriter, r *http.Request) { 
      inFile, err := os.Open("2.ts") 
      if err != nil { 
       log.Fatal(err) 
      } 
      defer inFile.Close() 

      block, err := aes.NewCipher(key) 
      if err != nil { 
       log.Fatal(err) 
       return 
      } 
      var iv [aes.BlockSize]byte 
      stream := cipher.NewOFB(block, iv[:]) 
      w.Header().Set("Content-type", "video/mp4") 
      writer := &cipher.StreamWriter{S: stream, W: w} 

      if _, err := io.Copy(writer, inFile); err != nil { 
       log.Fatal(err) 
       return 
      } 

      //http.ServeContent(w, r, "video.mp4", time.Now(), inFile) 
     } 

     func main() { 
      http.HandleFunc("/", ServeHTTP) 
      http.ListenAndServe(":2020", nil) 
     } 
+0

誰かが私をdownvotedファイルの末尾を確認し、なぜですか? – aissa

+0

解読したとしても、それは機能しません。ちょうどTSを読み、それを解読し、ブラウザにmp4を伝えることができます。ストリーム可能な断片化形式に変換し、マニフェストなどを生成する必要があります。 – szatmary

+0

解読に問題はありますか?ストリーミングに問題はありますか?何が起こると予想され、実際に何が起こるのですか? – JimB

答えて

0

私が強化されています。httpかかわらず、それをストリーミングする前に、その場でそれを解読する必要がありますサーバーは暗号化されたファイルを復号化して正しく処理しますが、私は以下のような別の問題があります。

ファイルが特定のサイズを超えるとファイルが破損する問題があります。

iはデバッグ目的のテキストファイルにいくつかのテストを行っているので、私はここでデータ結果を投稿することができます(big corrupted file

package main 

     import (
      "crypto/aes" 
      "crypto/cipher" 
      "log" 
      "net/http" 
      "os" 
      "time" 
     ) 

     type cipherHttpWriter struct { 
      http.ResponseWriter 
     } 

     func (c cipherHttpWriter) Write(b []byte) (int, error) { 
      var key []byte = []byte("[email protected]$.a-ala.HJOqweK45aghf&A") 
      block, err := aes.NewCipher(key) 
      if err != nil { 
       return 0, err 
      } 
      var iv [aes.BlockSize]byte 
      stream := cipher.NewOFB(block, iv[:]) 
      streamWriter := &cipher.StreamWriter{S: stream, W: c.ResponseWriter} 
      defer streamWriter.Close() 
      return streamWriter.Write(b) 
     } 

     func ServeHTTP(w http.ResponseWriter, r *http.Request) { 
      inFile, err := os.Open(string(r.URL.Path[1:])) 
      if err != nil { 
       log.Fatal(err) 
      } 
      defer inFile.Close() 
      writer := cipherHttpWriter{} 
      writer.ResponseWriter = w 

      http.ServeContent(writer, r, "", time.Now(), inFile) 
     } 

     func main() { 
      http.HandleFunc("/", ServeHTTP) 
      http.ListenAndServe(":2020", nil) 
     } 
関連する問題