1

我有一个包含 45-50 列和 45-50 行的数据表,我想创建一个校验和文本或 md5、sha1,我不知道哪个更好。如果还有一个,我将创建该文本并在数据库中搜索它。但是文本长度必须在 100-200 个字符之间,我不知道我能不能做到。那么您对此有何看法,我该怎么做?

谢谢。

4

4 回答 4

5

以下应该做:

// Serialize the table
var serializer = new DataContractSerializer(typeof(DataTable));
var memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, table);
byte[] serializedData = memoryStream.ToArray();

// Calculte the serialized data's hash value
var SHA = new SHA1CryptoServiceProvider();
byte[] hash = SHA.ComputeHash(serializedData);

// Convert the hash to a base 64 string
string hashAsText = Convert.ToBase64String(hash);

请注意,我们正在序列化整个表,不仅是它的字段值,而且表必须有一个名称才能允许序列化

于 2011-01-26T09:20:01.387 回答
2

算法方面,MD5SHA1(较新)都适用于校验和。

不过有几件事:

  • 为什么文本长度需要在 100-200 个字符之间?它仍然是一个散列,无论长度如何,都描绘了相同的信息。
  • 你想做什么?
  • 您需要帮助的部分是什么?
于 2011-01-26T08:30:49.667 回答
0

首先,您应该对数据集进行二进制序列化

http://www.eggheadcafe.com/community/aspnet/2/7700/serializedeserialize-a-datatable.aspx

用于计算 sha1 :

/// <summary>
/// Calculates SHA1 hash
/// </summary>
/// <param name="text">input string</param>
/// <param name="enc">Character encoding</param>
/// <returns>SHA1 hash</returns>
public static string CalculateSHA1(string text, Encoding enc)
{
    byte[] buffer = enc.GetBytes(text);
    SHA1CryptoServiceProvider cryptoTransformSHA1 = 
    new SHA1CryptoServiceProvider();
    string hash = BitConverter.ToString(
        cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");

    return hash;
}

或 md5 :

http://www.spiration.co.uk/post/1203/MD5%20in%20C%23%20-%20works%20like%20php%20md5%28%29%20example

于 2011-01-26T08:37:09.973 回答
0

如果您要对数据表中的数据行进行哈希处理,请使用 drRow.GetHashCode()。

于 2019-11-15T16:29:06.677 回答