2011-01-26 2 views
1

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

Спасибо.

+0

Почему такой длинной контрольную суммы? SHA1 составляет всего 160 бит, что составляет 20 символов. Столкновение хэшей может быть достигнуто методами грубой силы в 2^80 (1 208 925 819 614 629 174 706 176) и целенаправленными атаками примерно в 2 69 попыток. Более подробную информацию можно найти в блоге Schneier: http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html –

+0

100-200 символов больше всего. если я могу справиться с этим с 20 символами без проблем. но я не хочу создавать контрольную сумму из datatable объекта, также хочу проверять строки и поля. то я могу найти, если есть другое. – mehmetserif

ответ

2

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

Пара вещей, хотя:

  • Почему длина текста нужно быть между 100-200 символов? Это все еще хэш, и отображает ту же информацию, независимо от длины.
  • Что вы хотите сделать?
  • С какой частью вам нужна помощь?
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

2

Следующие должны делать:

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

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

+0

- это пример для .net 4.0, потому что я не могу найти объекты DataContractSerializer и XmlDictionaryWriter. Можете ли вы мне помочь? – mehmetserif

+2

@mehmetserif добавить ссылку на system.runtime.serialization – ileff

+0

Я знаю, что это старо, но для чего писатель? Он не используется в остальной части кода ... –

Смежные вопросы