.NET SHA256与Object.GetHashCode()

时间:2014-02-19 11:50:26

标签: c#

使用SHA256 Vs Object.GetHashCode()有什么优缺点?

在下面的代码中,两种方法的输出相同,但GetHashCode()似乎更简单,需要更少的对象/代码。

class Program
    {
        static void Main(string[] args)
        {
            TestGetHashCode();
            TestSha256();
            Console.Read();
        }

        static void TestSha256()
        {
            Console.WriteLine("Testing SHA256");
            UnicodeEncoding byteConverter = new UnicodeEncoding();
            SHA256 sha256 = SHA256.Create();
            string data = "A paragraph of text";
            byte[] hashA = sha256.ComputeHash(byteConverter.GetBytes(data));
            data = "A paragraph of changed text";
            byte[] hashB = sha256.ComputeHash(byteConverter.GetBytes(data));
            data = "A paragraph of text";
            byte[] hashC = sha256.ComputeHash(byteConverter.GetBytes(data));
            Console.WriteLine(hashA.SequenceEqual(hashB)); // Displays: false
            Console.WriteLine(hashA.SequenceEqual(hashC)); // Displays: true
        }

        static void TestGetHashCode()
        {
            Console.WriteLine("Testing Object.GetHashCode()");
            string data = "A paragraph of text";
            int hashA = data.GetHashCode();
            data = "A paragraph of changed text";
            int hashB = data.GetHashCode();
            data = "A paragraph of text";
            int hashC = data.GetHashCode();
            Console.WriteLine(hashA.Equals(hashB)); // Displays: false
            Console.WriteLine(hashA.Equals(hashC)); // Displays: true
        }
    }

1 个答案:

答案 0 :(得分:1)

你无法比较两者,因为它们是为两个完全不同的目的而构建的。 你的目标是什么? - 加密或简单对象查找?

对象查找(在哈希表中):GetHashCode()

用于加密:SHA256与例如AES。

应该为你的类型覆盖

GetHashCode(),理想情况下只使用不可变字段,即。字段不会在对象的生命周期内发生变化,只读字段就是一个很好的例子; - )

SHA256用于对密码进行哈希处理,以便在采用256位密钥的加密算法中使用。用于加密的散列算法的要点是它必须很慢(与对象查找场景相反)才能使暴力攻击密码变得更加困难。

所以没有这样的优点/缺点,但实际上取决于你的目标。使用正确的工具: - )