De acuerdo con esta publicación, Dominick Baier estaba comparando dos firmas de HMACSHA256
y se estaba filtrando en una oportunidad sin éxito. .
Cuando se trabaja con clases criptográficas .NET, ¿cuándo se debe adoptar un enfoque similar y dormir durante un período de tiempo aleatorio? ¿Qué cantidad de tiempo es suficiente?
[MethodImpl(MethodImplOptions.NoOptimization)]
public static bool IsEqual(string s1, string s2)
{
if (s1 == null && s2 == null)
{
return true;
}
if (s1 == null || s2 == null)
{
return false;
}
if (s1.Length != s2.Length)
{
return false;
}
var s1chars = s1.ToCharArray();
var s2chars = s2.ToCharArray();
int hits = 0;
for (int i = 0; i < s1.Length; i++)
{
if (s1chars[i].Equals(s2chars[i]))
{
hits += 2;
}
else
{
hits += 1;
}
}
bool same = (hits == s1.Length * 2);
if (!same)
{
var rnd = new CryptoRandom();
Thread.Sleep(rnd.Next(0, 10));
}
return same;
}