2017-12-12 24 views
0

AES-128で暗号化されたm3u8 TSファイルを解読します。ここで我々はenc.keyファイルと私たちは復号化のためにこれらのC#の機能を使用しているが、我々は、塩を見つける方法を知っているか、いないDVQpuWrxZLd2nCTTxAysIg==AES-128で暗号化されたm3u8 TSファイルを解読する方法

です'enc.key'に対するサーバの応答の両方を持っている私たちの.m3u8ファイル

#EXTM3U 
#EXT-X-TARGETDURATION:12 
#EXT-X-ALLOW-CACHE:YES 
#EXT-X-PLAYLIST-TYPE:VOD 
#EXT-X-KEY:METHOD=AES-128,URI="enc.key?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjdjY2I5ZTAxZGI1YzVkM2IzMWUzMzc1NzQ3MjZjNjYwIiwiZXhwIjoxNTEzMTU4ODM5LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.vvYKPY9tyBnhGGnNtY-XLy_Hz5cyJx5Ma2APVv0g5dk" 
#EXT-X-VERSION:3 
#EXT-X-MEDIA-SEQUENCE:1 
#EXTINF:6.000, 
s-1-v1-a1.ts?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjdjY2I5ZTAxZGI1YzVkM2IzMWUzMzc1NzQ3MjZjNjYwIiwiZXhwIjoxNTEzMTU4ODM5LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.vvYKPY9tyBnhGGnNtY-XLy_Hz5cyJx5Ma2APVv0g5dk 
#EXTINF:6.000, 
s-2-v1-a1.ts?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjdjY2I5ZTAxZGI1YzVkM2IzMWUzMzc1NzQ3MjZjNjYwIiwiZXhwIjoxNTEzMTU4ODM5LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.vvYKPY9tyBnhGGnNtY-XLy_Hz5cyJx5Ma2APVv0g5dk 
#EXTINF:6.000, 
s-3-v1-a1.ts?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjdjY2I5ZTAxZGI1YzVkM2IzMWUzMzc1NzQ3MjZjNjYwIiwiZXhwIjoxNTEzMTU4ODM5LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.vvYKPY9tyBnhGGnNtY-XLy_Hz5cyJx5Ma2APVv0g5dk 
#EXTINF:12.000, 
s-4-v1-a1.ts?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjdjY2I5ZTAxZGI1YzVkM2IzMWUzMzc1NzQ3MjZjNjYwIiwiZXhwIjoxNTEzMTU4ODM5LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.vvYKPY9tyBnhGGnNtY-XLy_Hz5cyJx5Ma2APVv0g5dk 

ですブロックサイズ?または基本的に正しい方法でそれをやっていますか?

public static void DecryptFile(string inputFile, string output,string password) 
     { 

      byte[] bytesToBeDecrypted = File.ReadAllBytes(inputFile); 
      byte[] passwordBytes = Encoding.UTF8.GetBytes(password); 
      passwordBytes = SHA256.Create().ComputeHash(passwordBytes); 
      byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes); 


      File.Delete(inputFile); 


      File.WriteAllBytes(output, bytesDecrypted); 
     } 


     public static byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes) 
     { 
      byte[] decryptedBytes = null; 

      // Set your salt here, change it to meet your flavor: 
      // The salt bytes must be at least 8 bytes. 
      byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; 

      using (MemoryStream ms = new MemoryStream()) 
      { 
       using (RijndaelManaged AES = new RijndaelManaged()) 
       { 
        AES.KeySize = 128; 
        AES.BlockSize = 128; 

        var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000); 
        AES.Key = key.GetBytes(AES.KeySize/8); 
        AES.IV = key.GetBytes(AES.BlockSize/8); 

        AES.Mode = CipherMode.CBC; 
        AES.Padding = PaddingMode.PKCS7; 
        using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write)) 
        { 
         cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length); 
         cs.Close(); 
        } 
        decryptedBytes = ms.ToArray(); 
       } 
      } 

      return decryptedBytes; 
     } 
+0

'DVQpuWrxZLd2nCTTxAysIg ==' UTF8.GetBytes()を使用するのではなく、デコードする必要があります。限り、塩/ハッシュサイズが行く、それは仕様でおそらくm3u8ファイルの形式に固有のものです。 –

答えて

2

(それをバック見つけることができません)ここに似たquesion

はあなたEXT-X-KEYヘッダの塩またはブロックサイズ

ルックを見つけるために、どのようにすでにありました。それはAES-128と書かれていますので、AES-128を使用する必要があります(キーサイズはブロックサイズは常に128ビットです)。

RFCによると、デフォルトでは、Pkcs7パディング付きのCBCモードが使用されます。

4.3.2.4. EXT-X-KEYさらに状態:the Initialization Vector (IV) attribute value or the Media Sequence Number as the IV

だからIVはEXT-X-KEYヘッダに存在すべきです。そうでない場合は、シーケンス番号が使用されます(これはCBCにとってひどい考えですが、これはその方法です)。

または基本的に我々は正しい方法で

をそれをやっている基本的には(塩およびキーを除く)[OK]を探します。私は暗号化キーが何か分かりません。サーバーからのエンコードされたレスポンスは16ビット(128ビット)であるため、キーになることができると思います(自分で見つけなければなりません)。

+0

シーケンス番号をIVに変換するにはどうしたらいいですか? – Oli

+0

@Oliその番号のバイナリ表現です。0x0000000000000001、0x0000000000000002などです。しかし、私は多くの暗号化を使用していますが、メディアファイルではありません。 – gusto2

+0

どのようにして1または2か任意の数値をC#でバイナリ表現の形のバイト[16]に変換できますか? – Oli

関連する問題