2

.tsビデオファイルがAES128暗号化を使用して暗号化されているかどうかを判断するための簡単な自動テストを作成したいと思います。暗号化されたファイルと暗号化されていないファイルの両方にアクセスできます。キーにもアクセスできます。私は暗号化を行う開発者と協力しているので、ほとんどすべてにアクセスできます:)

ファイルサイズが異なるかどうかを確認するだけでなく、より高度なテストを実行したいと思います。

私が書くことができるいくつかの簡単なテストコードについて何か考えはありますか?私はc#またはpowershellでコードを書いているでしょう。

私はこのようなものの経験がまったくないので、子供のように私を自由に扱ってください。

ありがとう

4

3 に答える 3

1

TS コンテナが完全に暗号化されている場合は、ファイルが暗号化されているかどうかを確認するよりも、ファイルが有効な MPEG-TS ファイルであるかどうかを確認する方がおそらく効率的です。無効な場合は、暗号化されていると想定します。ファイルの最初の数バイトを読み取って、形式を検証できます。形式 (または「マジック ナンバー」) は、次のドキュメントに記載されています。

http://en.wikipedia.org/wiki/MPEG_transport_stream#Packet

お役に立てれば。

于 2012-04-20T20:01:53.133 に答える
1

最終的に ac# コマンドラインを作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    using System.IO;
    using System.Security.Cryptography;

    class Program
    {
        static void Main(string[] args)
        {

            if (args.Length == 0)
            {
                Console.WriteLine("<key> <iv> <encryptedfile> <outputdecryptedfile>");
                Environment.Exit(-1);
            }

            //Console.ReadLine();
            byte[] encryptionKey = StringToByteArray(args[0]);
            byte[] encryptionIV = StringToByteArray(args[1]);

            try
            {
                using (FileStream outputFileStream = new FileStream(args[3], FileMode.CreateNew))
                {
                    using (FileStream inputFileStream = new FileStream(args[2], FileMode.Open))
                    {
                        using (var aes = new AesManaged { Key = encryptionKey, IV = encryptionIV, Mode = CipherMode.CBC })
                        using (var encryptor = aes.CreateDecryptor())
                       using (var cryptoStream = new CryptoStream(inputFileStream, encryptor, CryptoStreamMode.Read))
                        {
                            cryptoStream.CopyTo(outputFileStream);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }            
        }

        public static byte[] StringToByteArray(string hex)
        {
            return Enumerable.Range(0, hex.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                             .ToArray();
        }

    }
}
于 2012-04-25T13:44:11.490 に答える
1

この背後にある本当の理由は何ですか?ファイルを 2 回暗号化したり、2 回復号化したりしないということですか? 要件がわかっている場合は、おそらくより良い解決策があります。

ただし、これまでに確認したところ、ファイルの復号化を試みる必要があるように思われます。復号化に失敗した場合は、暗号化されていないと考えられますが、これには非常に時間がかかる可能性があります。ファイルを読み取り用に開き、行を読み取り、平文があるかどうかを確認する以外に、どの平文と比較するかを知っていると仮定して、他に方法があるかどうかはわかりません。

暗号化/復号化が適切に機能しているかどうかをテストしようとしている場合は、既知のプレーンテキストを含む入力ファイルを取得し、正しいキーで暗号化してから、正しいキーで 1 回、無効なキーで 2 回復号化することができます。 . 結果を 3 つの方法で比較します。

于 2012-04-20T19:26:03.797 に答える