source: trunk/CrypPlugins/MD5Collider/Algorithm/MD5ColliderBase.cs @ 1183

Last change on this file since 1183 was 1183, checked in by pretzsch, 12 years ago

+ MD5Collider: Added description
+ MD5Collider: Added new optional input allowing user to specify prefix of generated colliding data blocks
o MD5Collider: Made RandomSeed input optional

File size: 3.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows.Threading;
6using System.Timers;
7
8namespace Cryptool.Plugins.MD5Collider.Algorithm
9{
10    abstract class MD5ColliderBase : IMD5ColliderAlgorithm
11    {
12        public byte[] FirstCollidingData { get; protected set; }
13        public byte[] SecondCollidingData { get; protected set; }
14        public byte[] RandomSeed { protected get; set; }
15        public byte[] IHV { protected get; set; }
16
17        private String _status;
18        public string Status { get { return _status; } set { _status = value; OnPropertyChanged("Status"); } }
19
20        public MD5ColliderBase()
21        {
22            MatchProgressMax = 1;
23            MatchProgress = 0;
24
25            progressUpdateTimer.Interval = 100;
26            progressUpdateTimer.Elapsed += progressUpdateTimer_Tick;
27
28            timer.Interval = 1000;
29            timer.Elapsed += new ElapsedEventHandler(timer_Tick);
30        }
31
32        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
33        private void OnPropertyChanged(string propertyName)
34        {
35            if (PropertyChanged != null)
36                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
37        }
38
39        private int _matchProgressMax;
40        public int MatchProgressMax
41        {
42            get { return _matchProgressMax; }
43            set { int old = _matchProgressMax; _matchProgressMax = value; }
44        }
45
46        private int _matchProgress;
47        public int MatchProgress
48        {
49            get { return _matchProgress; }
50            set { int old = _matchProgress; _matchProgress = value; }
51        }
52
53        private Timer progressUpdateTimer = new Timer();
54
55        void progressUpdateTimer_Tick(object sender, EventArgs e)
56        {
57            UpdateProgress();
58        }
59
60        abstract protected void PerformFindCollision();
61
62        abstract protected void PerformStop();
63
64        private DateTime startTime;
65
66        private Timer timer = new Timer();
67        private void StartTimer()
68        {
69            startTime = DateTime.Now;
70            ElapsedTime = TimeSpan.Zero;
71
72            timer.Start();
73            progressUpdateTimer.Start();
74        }
75
76        void timer_Tick(object sender, EventArgs e)
77        {
78            ElapsedTime = DateTime.Now - startTime;
79        }
80
81        private void StopTimer()
82        {
83            timer.Stop();
84            progressUpdateTimer.Stop();
85
86            UpdateProgress();
87        }
88
89        private void UpdateProgress()
90        {
91            OnPropertyChanged("MatchProgressMax");
92            OnPropertyChanged("MatchProgress");
93        }
94
95        public void FindCollision()
96        {
97            CheckRandomSeed();
98            CheckIHV();
99
100            StartTimer();
101            PerformFindCollision();
102            StopTimer();
103        }
104
105        private void CheckIHV()
106        {
107            if (IHV == null || IHV.Length != 16)
108            {
109                IHV = new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
110            }
111        }
112
113        private void CheckRandomSeed()
114        {
115            if (RandomSeed == null)
116            {
117                RandomSeed = new byte[35];
118                new Random().NextBytes(RandomSeed);
119            }
120        }
121
122        public void Stop()
123        {
124            PerformStop();
125            StopTimer();
126        }
127
128        #region IMD5ColliderAlgorithm Member
129
130        private TimeSpan _elapsedTime;
131        public TimeSpan ElapsedTime
132        {
133            get { return _elapsedTime; }
134            set { _elapsedTime = value; OnPropertyChanged("ElapsedTime"); }
135        }
136
137        #endregion
138    }
139}
Note: See TracBrowser for help on using the repository browser.