Пример #1
0
        public static void MatroskaHash(string inpath, string outpath)
        {
            FileInfo     f      = new FileInfo(inpath);
            Stream       i      = File.OpenRead(inpath);
            BinaryReader reader = new BinaryReader(i);
            Container    c      = new Container();

            c.Read(reader, (ulong)f.Length);
            FixUIDS(c);
            EbmlBinary segmentuid = NormalizeHeader(c);

            MoveTagInfoToTracks(c);
            Shrink(c);
            FixPositions(c);
            Stream       o      = File.Open(outpath, FileMode.Create, FileAccess.Write);
            BinaryWriter writer = new BinaryWriter(o);
            MD5          md5    = MD5.Create();

            c.Write(writer, md5);
            //Using Cluster Data MD5 as segment UID
            byte[] b = new byte[0];
            md5.TransformFinalBlock(b, 0, 0);
            byte[] hash = md5.Hash;
            segmentuid.Value = hash;
            writer.BaseStream.Seek((long)segmentuid.OutputValueOffset, SeekOrigin.Begin);
            writer.Write(hash);
            writer.Close();
            reader.Close();
            i.Close();
            o.Close();
        }
Пример #2
0
 public static void MatroskaHash(string inpath, string outpath)
 {
     FileInfo f = new FileInfo(inpath);
     Stream i = File.OpenRead(inpath);
     BinaryReader reader = new BinaryReader(i);
     Container c = new Container();
     c.Read(reader, (ulong)f.Length);
     FixUIDS(c);
     EbmlBinary segmentuid = NormalizeHeader(c);
     MoveTagInfoToTracks(c);
     Shrink(c);
     FixPositions(c);
     Stream o = File.Open(outpath, FileMode.Create, FileAccess.Write);
     BinaryWriter writer = new BinaryWriter(o);
     MD5 md5 = MD5.Create();
     c.Write(writer, md5);
     //Using Cluster Data MD5 as segment UID
     byte[] b = new byte[0];
     md5.TransformFinalBlock(b, 0, 0);
     byte[] hash = md5.Hash;
     segmentuid.Value = hash;
     writer.BaseStream.Seek((long)segmentuid.OutputValueOffset, SeekOrigin.Begin);
     writer.Write(hash);
     writer.Close();
     reader.Close();
     i.Close();
     o.Close();
 }