【问题标题】:How to decrypt AES-128 encrypted m3u8 TS files如何解密 AES-128 加密的 m3u8 TS 文件
【发布时间】:2017-12-12 09:42:48
【问题描述】:

我们要解密 AES-128 加密的 m3u8 TS 文件。这是我们的 .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

我们同时拥有enc.key 文件和对'enc.key' 的服务器响应,即DVQpuWrxZLd2nCTTxAysIg==

我们正在使用这些 C# 函数进行解密,但我们不知道如何找到盐或块大小?或者基本上我们是以正确的方式做的?

 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;
        }

【问题讨论】:

  • DVQpuWrxZLd2nCTTxAysIg== 在我看来是 base-64 编码的,因此您需要对其进行解码而不是使用 UTF8.GetBytes()。就盐/哈希大小而言,这是特定于 m3u8 文件格式的东西,大概在规范中。

标签: c# encryption cryptography aes


【解决方案1】:

这里已经有类似的问题了(找不到了)

如何找到盐或块大小

查看您的 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 来说是个糟糕的主意,但就是这样)。

或者基本上我们以正确的方式进行操作

基本上看起来没问题(除了盐和键)。我不确定什么是加密密钥。来自服务器的编码响应有 16 位(128 位),所以我认为这可能是关键(你必须自己找出)

【讨论】:

  • 如何将序列号转换为 IV ?
  • @Oli 它只是数字的二进制表示形式。例如 0x0000000000000001、0x0000000000000002。但是 - 我经常使用加密,但不是用于媒体文件,所以我希望它对你有用
  • 如何在 C# 中以二进制表示形式将 1 或 2 或任何数字转换为字节 [16] ?
猜你喜欢
  • 2013-04-14
  • 2018-05-30
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
相关资源
最近更新 更多