Estou cego, encontrei uma falha ou não estou sabendo lidar com hashes. Tenho duas bytes arrays aleatórias, uma gerada por um algoritmo e outra original. Estou tentando fazer o algoritmo ficar EXATAMENTE igual à original. Visualmente consegui, com os mesmos bytes, o mesmo tamanho nas mesmas posições.
Mas ao verificar os hashes usando SHA-256, dá diferença entre os hashes para as byte-arrays idênticas.
A
é o hash da byte-array original
A¹
é o hash da byte-array gerada
Ax
são os bytes contidos na byte-array original
Ay
são os bytes contidos na byte-array gerada pelo algoritmo
Observem que, Ax
e Ay
são praticamente idênticas. Mas seus hashes são diferentes. O que está acontecendo?
Método usado para calcular os hashes:
public static string ToHex(byte[] bytes, bool upperCase) { using (var k = new HMACSHA256()) { bytes = k.ComputeHash(bytes); } StringBuilder result = new StringBuilder(bytes.Length * 2); for (int i = 0; i < bytes.Length; i++) result.Append(bytes[i].ToString(upperCase ? "X2" : "x2")); return result.ToString(); }
Atualmente estou usando o .NET Standart 2.0.