使用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
}
}
答案 0 :(得分:1)
你无法比较两者,因为它们是为两个完全不同的目的而构建的。 你的目标是什么? - 加密或简单对象查找?
对象查找(在哈希表中):GetHashCode()
用于加密:SHA256与例如AES。
应该为你的类型覆盖 GetHashCode()
,理想情况下只使用不可变字段,即。字段不会在对象的生命周期内发生变化,只读字段就是一个很好的例子; - )
SHA256用于对密码进行哈希处理,以便在采用256位密钥的加密算法中使用。用于加密的散列算法的要点是它必须很慢(与对象查找场景相反)才能使暴力攻击密码变得更加困难。
所以没有这样的优点/缺点,但实际上取决于你的目标。使用正确的工具: - )