Как я могу создать контрольную сумму из объекта DataTable? - PullRequest
1 голос
/ 26 января 2011

У меня есть таблица данных с 45-50 столбцами и 45-50 строками, и я хочу создать текст контрольной суммы или md5, sha1, я не знаю, какой из них лучше. Я создам этот текст и поищу его в базе данных, если есть еще один. Но длина текста должна быть от 100 до 200 символов, я не знаю, смогу ли я это сделать. Так что вы думаете об этом и как я могу это сделать?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 26 января 2011

Следующие действия должны выполняться:

// 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);

Обратите внимание, что мы сериализуем всю таблицу, а не только значения ее полей и что таблица должна иметь имя, чтобы разрешить сериализацию

2 голосов
/ 26 января 2011

Хорошо по алгоритму, либо MD5 или SHA1 (новее) будет работать для контрольной суммы.

Пара вещей, хотя:1009 * Почему длина текста должна быть от 100 до 200 символов?Это все еще хеш, и он отображает ту же информацию независимо от длины.

Что вы собираетесь делать? Какая часть вам нужна помощь?
0 голосов
/ 26 января 2011

сначала вы должны выполнить двоичную сериализацию вашего набора данных

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

для расчета ша1:

/// <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

...